반응형
의존성 주입(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. 가독성이 좋아진다.
아직까지 의존성주입에 대해 완전히 이해하지는 못해서 계속 추가할 예정
반응형
'STUDY > SPRING' 카테고리의 다른 글
Spring boot - 프리마커(freemaker) 설정 (0) | 2023.07.06 |
---|---|
Spring Boot 기본 구조 (0) | 2023.07.06 |
카카오 로그인 API 사용하기 - 4(로그인 완료) (0) | 2022.08.18 |
카카오 로그인 API 사용하기 - 3 (0) | 2022.08.18 |
카카오 로그인 API 사용하기 -2 (1) | 2022.08.16 |