[10분 테코톡] 오찌, 야호의 DI와 IoC

KIM YONG GU·2023년 9월 30일
0

우아한테크

목록 보기
13/41

IoC란(Inversion Of Control, 제어의 역전)?

일반적으로 제어란 직접 객체를 생성하여 코드를 제어하는 것.
객체 생명주기나 메서도의 호출을 직업 제어 또는 관리한다.
제어의 역전이란 프로그램의제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것

(1) IoC가 필요한 이유?

객체지향 원칙을 잘 지키기 위함. 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며,
이에 따라 변경에 유연한 코드를 작성할 수 있는 구조가 될 수 있기 때문임.

(2) 할리우드 법칙(Hollywood Principle)
Don't call us, we'll call you.

코너 속 코너 DIP(Dependency Inversion Principle, 의존 역전 원칙)란?

상위 레벨은 모듈을 절대 하위 레벨 모듈에 의존하지 않는다.
둘 다 추상화에 의존해야 한다.

IoC와 DIP의 목적

클래스간 결합을 느슨히 하기 위함
한 클래스의 변경에 따른 다른 클래스들의 영향을 최소화
-> 애플리케이션을 지속가능하고 확장성 있게 만든다.

둘 다 Pirincle(원칙)이다.
IoC의 제어의 역전, DIP는 의존의 역전

DI(Dependency Injection, 의존성 주입)란

클래스 간에 의존 관계가 있다는 것, 즉 한 클래스가 바뀔 때 다른 클래스가 영향을 받는다는 것
말 그대로, 의존성을 다른 곳에서 주입하는 것.

  1. 생성자 주입

  1. Setter 주입

  1. Interface 주입

의존성 분리

DIP를 이용해 의존 관계를 분리시킨다.

상위계층이 하위계층이 의존하는 현상을 Interface를 이용해 반전시켜 하위계층의 구현으로부터 독립시킨다.

Spring DI

자동 주입

스프링 빈으로 등록되면 스프링이 자동으로 생성해준다.
이 때 필요한 의존성도 주입해준다.

=> @Autowired 애노테이션(Annotation)을 사용.

  1. 필드 주입 (추천되지 않음)

  2. Setter 주입

빈 생성자 또는 빈 정적 팩토리 메서드가 필요하다.
의존성을 선택적으로 주입할 때 사용.

  1. 생성자 주입 (스프링 공식 추천)

생성자 주입 방식의 장점

1) NullPointer Exception 방지
2) 순환 참조 방지 (스프링 2.6버전부터 기본 설정으로 순환참조 장비. 실행초기에 경고)

*의존성이 여러개일 때 우선순위

생성자 -> 필드 -> setter

*주입 대상이 여러 개일 때 우선순위

타입 -> @Qualifier -> @Primary -> 변수명

profile
Engineer, Look Beyond the Code.

0개의 댓글