λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

STUDY/SPRING

μ˜μ‘΄μ„± μ£Όμž…(DI)

λ°˜μ‘ν˜•
μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection) : μŠ€ν”„λ§μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜λ‘œ μ œμ–΄μ˜ 역행이 λ°œμƒν•  λ•Œ μŠ€ν”„λ§ 내뢀에 μžˆλŠ” 객체(Bean)을 κ΄€λ¦¬ν•˜λŠ” 기법

* μ œμ–΄μ˜ μ—­ν–‰ : (IoC : Inversion Of Control) : λ©”μ„œλ“œλ‚˜ 객체의 ν˜ΈμΆœμ„ κ°œλ°œμžκ°€ κ²°μ •ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ™ΈλΆ€μ—μ„œ κ²°μ •λ˜λŠ” 것. 즉 μ œμ–΄κΆŒμ„ κ°œλ°œμžκ°€ μ•„λ‹Œ 제 3μžκ°€ κ°€μ§€κ²Œ ν•˜λŠ” 것을 λ§ν•œλ‹€. >> λŠμŠ¨ν•œ 결합을 μ œκ³΅ν•˜λŠ” 것이 λͺ©μ 

 

* μ˜μ‘΄μ„± : ν΄λž˜μŠ€λ‚˜ κ°œμ²΄κ°„ 관계λ₯Ό λ§ν•˜λ©° μ˜μ‘΄μ„±μ΄ 높을 수둝 객체가 ν˜Όμžμ„œ μ²˜λ¦¬ν•  수 μ—†κ³  λ‹€λ₯Έ 객체λ₯Ό ν†΅ν•΄μ„œ 도움을 λ°›μ•„μ•Όλ§Œ μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ‹€. >> ν•œ ν΄λž˜μŠ€κ°€ λ°”λ€” λ•Œ λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ 영ν–₯을 많이 λ°›λŠ”λ‹€.

 

=> κ²°κ΅­ DIλŠ” 의쑴 관계에 μžˆλŠ” 객체λ₯Ό 직접 μƒμ„±ν•˜κ³  μ œμ–΄ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ œμ–΄μ˜ 역행을 톡해 ν•„μš”ν•œ 객체λ₯Ό μ™ΈλΆ€μ—μ„œ κ²°μ •ν•΄μ„œ μ—°κ²°ν•˜λŠ” 것을 λ§ν•œλ‹€.


public class BoardDAOTest {

	//DAO 객체 ν•„μš” => 객체 μ£Όμž…
	
	@Inject
	private BoardDAO dao;
	
	//@Test
	public void κΈ€μ“°κΈ°λ™μž‘() {
		BoardVO vo = new BoardVO();
		vo.setTitle("κ³΅μ§€μ‚¬ν•­μž…λ‹ˆλ‹€.");
		vo.setContent("주말은 휴무");
		vo.setWriter("κ΄€λ¦¬μž");
		
		dao.create(vo);		
	}
	
	//@Test
	public void νŽ˜μ΄μ§•μ²˜λ¦¬_호좜() {
		List<BoardVO> boardList =  dao.listPage();
		
		for(BoardVO vo :boardList) {
			System.out.println(vo.getBno()+" : "+vo.getTitle());
		}
		
	}
	//@Test
	public void νŽ˜μ΄μ§•μ²˜λ¦¬_호좜2() {
		

		List<BoardVO> boardList = dao.listPage(3, 10);
		
		for(BoardVO vo : boardList) {
			System.out.println(vo.getBno()+" : "+vo.getTitle());
		}
	}
	
	@Test
	public void νŽ˜μ΄μ§•μ²˜λ¦¬_호좜3() {
		
		Criteria cri = new Criteria();
		
		cri.setPage(3);
		cri.setPerPageNum(5);
		
		List<BoardVO> boardList = dao.listPage(cri);
		
		for(BoardVO vo : boardList) {
			System.out.println(vo.getBno()+" : "+vo.getTitle());
		}
	}
}

dao객체가 ν•„μš”ν•  λ•Œλ§ˆλ‹€ newμ—°μ‚°μžλ‘œ μƒˆλ‘œμš΄ 객체λ₯Ό 계속 μƒμ„±ν•΄λ‚΄λŠ” 것(κ°•ν•œ κ²°ν•©)이 μ•„λ‹ˆλΌ

@Inject
private BoardDAO dao;

μœ„ μ½”λ“œλ₯Ό μ΄μš©ν•΄ μ˜μ‘΄μ„±μ„ μ£Όμž…ν•˜λ©΄ κ°μ±„κ°„μ˜ 결합도λ₯Ό 쀄일 수 μžˆλ‹€(λŠμŠ¨ν•œ κ²°ν•©)

 

μž₯점 

1. μ˜μ‘΄μ„±μ΄ 쀄어든닀.

2. μž¬μ‚¬μš©μ„±μ΄ 높아진닀.

3. ν…ŒμŠ€νŠΈν•˜κΈ° 쒋아진닀.

4. 가독성이 쒋아진닀.

 

μ•„μ§κΉŒμ§€ μ˜μ‘΄μ„±μ£Όμž…μ— λŒ€ν•΄ μ™„μ „νžˆ μ΄ν•΄ν•˜μ§€λŠ” λͺ»ν•΄μ„œ 계속 μΆ”κ°€ν•  μ˜ˆμ •

 

λ°˜μ‘ν˜•