IoC - 제어의 역전
- Inversion of Control의 약자
- 제어의 역전은 기존의 개발 방식에서 개발자가 직접 제어 흐름을 제어하는 것이 아니라, 외부의 프레임워크나 라이브러리가 제어 흐름을 대신하게 되는 것
- 프로그램의 제어 흐름이 뒤바뀜
- 클래스 간의 결합을 느슨하게 해 테스트와 유지 관리를 더 쉽게 하는 설계(design) 원칙
DI - 의존성 주입
- Dependency Injection의 약자
- A 객체가 B 객체의 메서드를 필요로 할 때 A클래스 안에 B클래스의 생성자를 사용해 B의 인스턴스를 만들어 사용하는 대신, 의존성 주입은 다음 세 가지 방법 중 하나를 써서 B클래스가 A클래스에 주입되도록 함.
- 생성자 주입
- Setter 주입
- 인터페이스 주입
- A 객체가 B 객체의 메서드를 필요로 할 때 A클래스 안에 B클래스의 생성자를 사용해 B의 인스턴스를 만들어 사용하는 대신, 의존성 주입은 다음 세 가지 방법 중 하나를 써서 B클래스가 A클래스에 주입되도록 함.
강한 결합의 문제점
- Controller 5 개가 각각 Service1 을 생성하여 사용 중일 때
- Repository1 생성자 변경에 의의 모든 Contoller 와 모든 Service 의 코드 변경이 필요함
- 강한 결합 해결법
- 각 객체에 대한 객체 생성은 딱 1번만!
- 생성된 객체를 모든 곳에서 재사용!
- 생성자 주입을 사용하여 필요로하는 객체에 해당 객체 주입!
'🗂️ Study > 🌿Spring' 카테고리의 다른 글
JPA (0) | 2024.05.21 |
---|---|
IoC Container & Bean (0) | 2024.05.21 |
3 Layer Architecture (0) | 2024.05.21 |
JDBC (0) | 2024.05.21 |
Memo (CRUD 구현하기) (0) | 2024.05.21 |