의존성 주입(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) 설정  (0) 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
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • STUDY (107)
        • JAVA (30)
        • SPRING (29)
        • JSP (11)
        • DATABASE (19)
        • HTML (0)
        • CSS (4)
        • GITHUB (2)
        • ETC (4)
        • 자격증 (1)
        • ERROR (6)
      • PROJECT (6)
        • Personal_Project 01 - commu.. (1)
        • TeamProject - JOINUS (4)
      • EUNB (30)
        • 맛집 (27)
        • 여행 (3)
        • 전세사기 (0)
      • 오블완챌린지 ++ (11)
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바