-
IoC Container 와 Beanspring/스프링 입문 주차 2024. 1. 22. 20:57
IoC, DI 는 객체지향의 SOLID 원칙 그리고 GoF 의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다.
이 둘을 더 자세하게 구분해 보자면, IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당한다.
좋은 코드란 무엇일까?
- 논리가 간단해야 한다.
- 중복을 제거하고 표현을 명확하게 해야한다.
- 코드를 처음 보는 사람도 쉽게 이해하고 수정할 수 있어야 한다.
- 의존성을 최소화 해야 한다.
- 새로운 기능을 추가 하더라도 크게 구조의 변경이 없어야 한다.
이렇듯 좋은 코드를 작성하기 위해서는 신경써야 할 부분이 정말 많다.
따라서 Spring은 개발자가 Java를 사용하여 쉽게 좋은 코드를 작성할 수 있도록 도와주는 역할을 해준다.
IoC, DI는 좋은 코드 작성을 위한 Spring의 핵심 기술 중 하나라고 할 수 있다.
Controller -> Service -> Repository
위 흐름으로 갔을 때, 만약 Repository가 변경된다면 그것을 생성하는 Service, Controller 또한 바뀌어야 한다.
이런 흐름을 강한 결합 이라고 한다.
이것을 느그한 결합으로 바꾸어 유연한 코드로 만들어 주어야 한다.
그 때 사용되는 개념이 '제어의 역전'이다.
1.각 객체에 대한 생성은 딱 1번만
2.생성된 객체를 모든 곳에서 재사용
3.생성자 주입을 사용하여 필요로 하는 객체에 해당 객체 주입
생성자 주입을 통해 Repository -> Service -> Controller 로 흐름을 역전시키면,
상위 계층은 하위 계층이 변화해도 자신의 코드를 변경할 필요가 없어진다.
이렇게 외부에서 필요한 객체를 주입하는 패턴을 'DI패턴'이라고 한다.
다른 방법이 아닌 생성자 주입을 사용하는 이유는, 객체의 불변성을 지키기 위함이다.
생성자로 주입하는 방법은 final 을 사용한 채로 선언할 수 있다.
수정자 주입 방식도 사용하는 경우가 있다. (인터페이스인 객체의 구현체를 변경하는 경우 등...)
이럴 땐 @Autowired 사용'spring > 스프링 입문 주차' 카테고리의 다른 글
JPA란 무엇일까 (0) 2024.01.23 제어의 역전, ApplicationContext (2) 2024.01.22 JDBC란 무엇일까? (0) 2024.01.18 HTTP 데이터를 객체로 처리하는 방법 (0) 2024.01.18 PathVariable과 ReqestParam (0) 2024.01.18