의존성 주입(DI)

2022. 10. 28. 16:20·STUDY/SPRING
반응형
의존성 주입(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) 설정  (1) 2023.07.06
Spring Boot 기본 구조  (0) 2023.07.06
카카오 로그인 API 사용하기 - 4(로그인 완료)  (0) 2022.08.18
카카오 로그인 API 사용하기 - 3  (0) 2022.08.18
카카오 로그인 API 사용하기 -2  (2) 2022.08.16
'STUDY/SPRING' 카테고리의 다른 글
  • Spring boot - 프리마커(freemaker) 설정
  • Spring Boot 기본 구조
  • 카카오 로그인 API 사용하기 - 4(로그인 완료)
  • 카카오 로그인 API 사용하기 - 3
3unB
3unB
  • 3unB
    ILLILI
    3unB
  • 전체
    오늘
    어제
    • 분류 전체보기 (153)
      • STUDY (109)
        • JAVA (31)
        • SPRING (29)
        • JSP (11)
        • DATABASE (19)
        • HTML (0)
        • CSS (4)
        • GITHUB (2)
        • ETC (5)
        • 자격증 (1)
        • ERROR (6)
      • PROJECT (6)
        • Personal_Project 01 - commu.. (1)
        • TeamProject - JOINUS (4)
      • EUNB (30)
        • 맛집 (27)
        • 여행 (3)
        • 전세사기 (0)
      • 오블완챌린지 ++ (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 짱민지
    • 아랄이
  • 공지사항

  • 인기 글

  • 태그

    속초 중앙시장 감자전
    인제 두부
    전포 맛집
    콩콩팥팥 두부
    전포 연어덮밥
    전포 밥집
    속초 해변 숙소
    alter
    망미 조용한 카페
    전포 오꼬노미야끼
    전포동 맛집
    망미 카페
    전포 데이트
    망미 바
    티스토리챌린지
    속초 숙소 내돈내산
    망미 테린느
    센텀 신세계백화점 팝업
    Database
    mysql
    배열 한 컬럼에 넣기
    서면 설야멱
    oracle
    전포동 카페
    인제 고향집
    콩콩팥팥 맛집
    전포 신상 맛집
    전포동 핫플
    서면 맛집
    오블완
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.0
3unB
의존성 주입(DI)
상단으로

티스토리툴바