STUDY/SPRING

의존성 주입(DI)

3unB 2022. 10. 28. 16:20
반응형
의존성 주입(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. 가독성이 좋아진다.

 

아직까지 의존성주입에 대해 완전히 이해하지는 못해서 계속 추가할 예정

 

반응형