IoC
제어의 역전으로 객체 생성을 역전 시킨다는 것입니다.
IoC는 소프트웨어 개발에서 모듈간의 결합도를 줄이기 위해 제어의 반전을 권장하는 디자인 원칙입니다.
Spring에서는 DI(IoC)컨테이너를 활용하여 제어의 역전을 구현하고 있습니다.
Bean 설정정보를 DI 컨테이너에 등록하여 연결해주는 방식입니다.
DI(IoC)컨테이너 장점
- 객체의 생성,의존성을 개발자가 아닌 DI 컨테이너가 직접 관리합니다.
- 테스트에 유리합니다.
DI
Dependency Injection으로 어떤 객체가 사용하는 의존 객체를직접 생성하는것이 아닌,
외부에서 주입을 받아 사용하는 것입니다.
IoC 원칙을 구현하는 디자인 패턴 중 하나입니다.
Spring에서는 IoC에서 주입을 받습니다.
A객체에서 B객체를 직접 생성하게되면 A객체는 B객체에 강한의존을 하게됩니다.
하지만 다형성을 통해 B객체를 외부에서 주입받는다면
A객체는 더이상 B객체에 의존하지 않아도 됩니다.
즉, 느슨한 결합으로 유연한 코드가 됩니다.
DI 장점
- 모듈간에 결합도를 낮춰 유연한 코드작성이 가능합니다.
- 테스트하기 편합니다.
Bean
Bean이란 DI 컨테이너에 존재하며 관리를 받고있는 객체입니다.
Bean으로 등록된 객체 DI를 통해 주입하여 사용이 가능합니다.
DI 컨테이너는 Callback 메서드를 호출하여 Bean의 생성, 초기화, 소멸의 Lifecycle을 관리합니다.
Bean Lifecycle
스프링 컨테이너 생성 -> 스프링 빈 생성-> 의존관게 주입 -> 초기화 콜백-> DI 컨테이너 종료시 Bean 소멸
주의사항
Bean은 싱글톤으로 Bean객체안의 변수를 수정하면 동시성문제가 발생합니다.
변수를 수정하지 않도록 조심해야합니다.
따라서 가급적 Read만 가능해야 합니다.
@Scope("prototype") 어노테이션을 사용하면 싱글톤이 아닌 주입시마다 prototype Bean객체를 반환하여 싱글톤이 아닌 별개의 객체를 반환할 수 있습니다.
IoC, DI, Bean 사용 방법
의존성 주입 방법, Bean 등록 방법 에서 자세히 설명하였으니 참고바랍니다.
참고
의존성 주입 3분만에 이해하기 (Dependency Injection, Inversion of Control)
'Spring' 카테고리의 다른 글
[Jsp] <form:errors> 태그로 Validation 체크 (0) | 2023.12.29 |
---|---|
[스프링의 삼각형] AOP - 횡단괌심 (0) | 2023.10.11 |
싱글톤 패턴 (0) | 2023.09.22 |
디자인 패턴 (1) | 2023.09.22 |
객체지향 설계 원칙 - SOLID (0) | 2023.09.20 |