IoC & DI

2024. 10. 7. 21:08·TIL

IoC (Inversion of Control)란 ?

IoC란 제어의 역전이라 부른다

제어의 역전이란 메서드나 객체의 호출 작업을 개발자가 아닌 외부에서 결정되는 것을 의미한다.

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게하여

가독성 및 코드 유지 보수를 편하게 할 수 있게 한다.

 

DI (Dependency Injection)란 ?

DI란 의존성 주입이라 부르며 객체를 직접 생성하는게 아닌 외부(IoC 컨테이너)에서

생성한 후 주입시켜주는 방식이다.

DI를 사용한다면 의존성이 줄어들고 가독성이 높아지며 코드의 재사용성이 높아진다는

장점이 있습니다.

 

의존성 주입 방식으로는 3가지가 있다.

  • 생성자 주입
  • Set 메서드를 이용한 주입
  • 필드 주입

 이 3가지 중에서 스프링에서 권장하는 의존성 주입 방식은 생성자 주입이다.

 

생성자 주입

생성자를 통해 의존관계를 주입한느 방법으로 생성자를 호출 시에 딱 한번만 호출 되는 것을 보장한다.

public class Consumer {

    private final Food food;

    public Consumer(Food food) {
        this.food = food;
    }
}

 

Set  메서드를 이용한 주입

말 그대로 Setter 메서드를 이용하여 의존관계를 주입하는 방식이다.

public class Consumer {

    private Food food;

    public void setFood(Food food) {
        this.food = food;
    }
}

 

필드 주입

필드에 직접 의존관계를 주입하는 방법이다.

코드가 짧아지는 장점이 있지만 외부에서 변경이 불가능하고 테스트 코드를 작성하기 힘들다는 단점이 있다.

public class Consumer {
	
    private Food food;
}

 

위의 3가지 방법중에 스프링에서 생성자 주입을 권장하는 이유는 아래와 같다.

  • 의존관계 설정이 되지 않으면 컴파일 타임에 알 수 있다.
  • 의존성 주입이 필요한 필드를 final 키워드로 선언 가능하다.
  • 스프링에서 순환 참조 감지 기능을 제공하며 순환 참조 시 에러를 보여준다.
  • 테스트 코드 작성이 용이하다.

 

 

'TIL' 카테고리의 다른 글

JPA - 일정 CRUD  (1) 2024.10.13
JPA  (1) 2024.10.10
ResponseEntity  (0) 2024.10.04
Spring MVC 구조 이해하기  (1) 2024.10.01
Lombok  (0) 2024.09.27
'TIL' 카테고리의 다른 글
  • JPA - 일정 CRUD
  • JPA
  • ResponseEntity
  • Spring MVC 구조 이해하기
haseung22
haseung22
haseung22 의 블로그 입니다.
  • haseung22
    haseung22의 블로그
    haseung22
  • 전체
    오늘
    어제
    • 분류 전체보기 (56)
      • TIL (39)
      • 프로그래머스 (8)
      • 프로젝트 (5)
      • 면접 대비 (4)
        • 자료구조 (3)
        • Java (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    내배캠
    JPA
    오블완
    과제
    팀 프로젝트
    회고
    til
    Spring
    java
    자료구조
    알고리즘
    docker
    Spring Boot
    공부
    querydsl
    티스토리챌린지
    리팩토링
    뉴스피드
    계산기
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
haseung22
IoC & DI
상단으로

티스토리툴바