제어의 역전(Inversion of Control, IoC)
전통적인 프로그래밍 방식에서 프로그래머가 객체의 생성, 관리, 의존성 주입 등을 직접 코드에서 처리했던 것을 프레임워크 또는 라이브러리가 담당하게 하는 것
IoC 컨테이너
제어의 역전을 구현하는 주요 메커니즘 중 하나
- 객체 생성 및 라이프사이클 관리 → 애플리케이션 시작 시 필요한 모든 객체(빈)를 생성하고 초기화하여 프로그래머는 이와 관련된 코드를 작성할 필요 없고 비즈니스 로직에 집중할 수 있음
- 객체 간 의존성 주입 → 객체가 자신의 의존성을 직접 생성하지 않으므로 객체 간의 결합도를 낮추고, 코드의 유연성과 재사용성을 높이며, 테스트 시 Mock 객체 쉽게 주입 가능하므로 테스트 용이성을 높임
- 의존성 등의 설정 구성 → 객체의 생성, 초기화, 소멸 등을 중앙에서 관리하므로 코드의 가독성과 유지보수성이 높아짐
도메인 객체를 IoC 컨테이너로 관리하지 않는 이유
는 주로 도메인 객체의 특성과 역할에 있음
도메인 객체(엔티티)
- 일반적으로 단순한 POJO(Plain Old Java Object) 또는 DTO(Data Transfer Object)로 구현되며, 복잡한 비즈니스 로직을 포함하지 않고 주로 데이터를 담는 역할을 함
- 주로 데이터베이스 테이블에 매핑되는 데이터 모델로, CRUD 작업이 빈번히 발생함
IoC 컨테이너
- IoC 컨테이너를 통해 관리되는 객체는 일반적으로 비즈니스 로직, 서비스 호출, 의존성 주입 등을 처리하는 복잡한 구조를 가짐
- IoC 컨테이너는 애플리케이션 시작 시점에 모든 빈을 생성하고 초기화함
결론
- 구조의 차이로 책임을 분리하여 별도로 관리하는 것이 더 적합함
- 도메인 객체는 사용자의 요청에 따라 동적으로 변경되는데, IoC 컨테이너가 이들을 관리하게 되면 애플리케이션 시작 시점에 불필요하게 많은 객체가 생성될 수 있으며, 이는 비효율적이고 복잡한 상태 관리, 메모리 사용량 증가, 성능 저하를 초래함
'study > etc' 카테고리의 다른 글
정적 팩토리 메서드 (0) | 2024.06.27 |
---|---|
높은 응집도와 낮은 결합도 (0) | 2024.06.26 |
ISO 8601 (1) | 2024.03.26 |
DTO 사용 이유와 장단점 (0) | 2024.03.08 |
수직적 확장(Scale Up)과 수평적 확장(Scale Out) (0) | 2024.01.26 |