Search
Duplicate
🍃

IOC 컨테이너란?

Created time
2023/03/29 01:18
Last edited time
2024/07/12 02:10
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 개인의 생각을 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 피드백은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

IoC 컨테이너와 DI 컨테이너

일반적으로 IoC컨테이너와 DI컨테이너는 같은 뜻을 의미합니다. 이들 컨테이너의 뜻은 필요한 곳에 의존 관계 형성과 주입을 자동으로 처리해주는 프레임워크를 일컫습니다. 이 컨테이너의 존재로 인해 저희는 애플리케이션에서 쉽게 객체의 의존관계를 관리할 수 있게 됩니다.

컨테이너란?

컨테이너를 다시 정리하자면, 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공하는 것으로 이해하면 됩니다. 일반적으로 서버 안에 포함되어 배포 및 구동된다.주로 서버 내에 포함되어 배포되고 운영됩니다. 스프링 프레임워크에서 컨테이너 개념을 적용하면, 여기서 말하는 "객체"는 스프링에서는 Bean이라는 자바 객체로 불립니다.
IoC 컨테이너는 Inversion of Control의 개념을 기반으로 합니다. 이는 개발자가 직접적으로 객체의 생성 및 관리를 담당하는 대신, 컨테이너가 이를 대신 처리한다는 것을 의미합니다. 이를 통해 개발자는 객체의 생성 및 의존 관계 표현 작업을 컨테이너에게 위임함으로써, 낮은 결합도와 높은 응집도를 갖는 유지보수가 용이한 컴포넌트를 구현할 수 있게 됩니다. 이러한 처리 방식은 객체지향 프로그래밍에서 디자인 패턴 중 하나인 의존성 주입(Dependency Injection)을 통해 구현됩니다.

IoC 컨테이너의 주요 기능 및 장점

주요 기능

객체의 생성 및 파괴: 컨테이너는 객체의 생명주기를 관리합니다.
의존성 관리: 의존성이 있는 객체들을 자동으로 주입해줍니다.
구성(Configuration): 설정 파일(XML, 어노테이션, 자바 설정 클래스 등)을 통해 객체와 의존성을 정의합니다.
라이프사이클 관리: 객체의 초기화 및 소멸 메서드를 관리합니다.
AOP 지원: 컨테이너는 관점 지향 프로그래밍(Aspect-Oriented Programming)을 지원하여, 공통 관심 사항을 모듈화할 수 있습니다.

IoC 컨테이너의 장점

1.
유지보수성 향상: 의존성 주입을 통해 코드의 결합도를 낮추고, 유지보수성을 향상시킵니다.
2.
테스트 용이성: 모의 객체(Mock)를 쉽게 주입할 수 있어 단위 테스트가 용이해집니다.
3.
재사용성 증가: 잘 분리된 컴포넌트들은 재사용성이 높아집니다.
4.
구성의 유연성: 설정 파일이나 어노테이션을 통해 구성 정보를 변경할 수 있어, 코드 수정 없이도 구성을 변경할 수 있습니다.

IoC와 DI의 차이

IoC (Inversion of Control): 제어의 역전이라는 일반적인 개념으로, 프로그램의 흐름을 개발자가 제어하지 않고, 프레임워크나 컨테이너가 제어권을 갖는 것을 의미합니다.
DI (Dependency Injection): IoC의 구체적인 구현 방법 중 하나로, 필요한 객체를 직접 생성하는 것이 아니라 외부로부터 주입받는 방식을 말합니다.

참고