이것도 DI와 같이 찾아봤었는데 그 때는 이게 뭐야 컨테이너는 뭐고 빈은 뭔데 하면서 이해하지 못했는데 이것도 다시 정리한다.
간단하게 말하면 의존성 주입에 필요한 객체들의 라이프 사이클을 관리하여 의존성 주입을 자동으로 하는 것을 제어 역전이라고 한다. 의존성 주입을 위해 객체를 전달하는데 그게 한 두개도 아니고 사람이 다 처리하면 시간이 오래 걸리고 이것도 더 편하게 손이 덜가게 처리하기 위해서 컨테이너라는 곳에서 관리한다.
제어 역전
프로그램의 제어 흐름이 기존의 사용자 코드에서 프레임워크나 컨테이너에 의해 결정되는 개발 패러다임이다.
컨테이너
다양한 개체나 요소를 보관, 관리, 운반, 또는 포장하는 데 사용되는 객체 또는 구조물이다. 흔히 알고 있는 컨테이너가 포장, 운반, 관리, 보관 등의 역할을 하는데 이것을 프로그래밍에서도 똑같이 사용하지만 그 대상이 물리적인 게 아니라 코드라는 차이가 있을 뿐이라고 이해했다. 여러 컨테이너가 있지만 여기선 IOC 컨테이너를 다룬다.
IOC 컨테이너
제어 역전 디자인 패턴을 구현하고 객체의 라이프사이클을 관리하는 컨테이너이다.
- 객체 관리: 애플리케이션에서 사용되는 객체의 라이프사이클을 관리한다.
- 의존성 주입: 객체가 필요로 하는 의존성을 주입하는 역할을 한다.
- 구성 및 설정 관리: 애플리케이션의 설정 정보를 관리하고 구성을 로드한다.
사용 이유
- 애플리케이션의 제어 흐름 역전: 프레임워크나 컨테이너가 애플리케이션의 흐름을 관리하며, 개발자가 프레임워크에 의해 호출되는 방식으로 동작한다.
- 프레임워크나 컨테이너의 역할: 프레임워크나 컨테이너가 체의 라이프사이클 관리, 의존성 주입, 구성 설정 관리, AOP 등을 자동으로 처리한다.
- 유지보수성과 확장성: 외부에서 제어 흐름을 결정하고 설정 정보를 관리하므로, 변경이나 확장이 쉽게 이루어질 수 있다.
- 모듈화와 재사용성: 코드를 모듈화하고 재사용 가능한 컴포넌트로 나누는데 도움을 준다. 객체 간의 결합도가 낮아지고, 객체를 분리하고 다시 조립하는 작업이 쉬워지므로 코드의 재사용성이 증가합니다.
- 애플리케이션 설정 분리: 애플리케이션의 설정 정보를 외부로 분리하여 관리할 수 있다. 이는 설정 변경이나 확장이 용이하도록 도와준다.
기존에 의존성 주입을 학습하면서 클래스의 코드는 건들 필요 없지만 매개변수로 객체를 만들어 전달하는 과정이 필요했는데 이것을 프레임워크가 알아서 처리해주면서 프로그램의 흐름을 개발자가 제어하는 것이 아니게 된다. 즉, 손이 덜 가고 개발자는 비지니스 로직에만 집중할 수 있게 해준다.
빈은 스프링에서 사용되는 개념 같은데 이건 나중에 스프링 공부를 하면 다시 보겠지.
'오늘 뭐했냐 > 개발에 대한 주저리' 카테고리의 다른 글
23.10.01 데코레이터( @, Decorator) (0) | 2023.10.03 |
---|---|
23.09.30 NestJS에서 의존성 주입 (0) | 2023.10.03 |
23.09.28 의존성 주입이 있을 때 없을 때 (0) | 2023.09.29 |
23.09.27 모듈화(Modularization) (0) | 2023.09.27 |
23.09.26 의존성 주입(Dependency Injection, DI) (0) | 2023.09.26 |