2024.11.11 - [cs정리] - spring IOC 컨테이너란?
1. IOC(Inversion of Control)란 무엇인가요?
IoC는 제어의 역전이라는 의미를 담고 있으며, 객체의 생성과 관리를 개발자가 아닌 프레임워크 또는 컨테이너가 대신하는 구조를 말합니다. 일반적으로 객체가 필요한 의존성을 직접 생성하는 대신, 외부에서 주입하여 객체 간의 결합도를 낮추고 유연성을 높이는 방식입니다. Spring 프레임워크에서 IoC 컨테이너가 대표적인 예입니다.
2. IoC와 DI(Dependency Injection)의 차이점은 무엇인가요?
IoC는 객체 간의 제어권을 프레임워크나 컨테이너가 관리하도록 하는 개념이고, DI는 IoC의 구현 방식 중 하나입니다. 즉, DI는 객체가 필요한 의존성을 외부에서 주입하여 연결하는 방식으로 IoC를 실현합니다. Spring에서는 @Autowired, 생성자 주입 등을 사용해 DI를 통해 IoC를 구현합니다.
3. IoC의 장점은 무엇인가요?
IoC의 가장 큰 장점은 객체 간의 결합도가 낮아져 코드의 유연성과 테스트 가능성이 높아진다는 점입니다. IoC를 사용하면 각 객체가 독립적으로 존재하므로, 단위 테스트 시 Mock 객체를 활용하여 테스트할 수 있습니다. 또한, 필요한 의존성을 쉽게 교체하거나 추가할 수 있어 확장성이 높아집니다.
4. IoC 컨테이너의 역할은 무엇인가요?
IoC 컨테이너는 객체의 생성, 생명주기 관리, 의존성 주입을 담당합니다. Spring의 ApplicationContext가 대표적인 IoC 컨테이너로, 빈(Bean) 정의와 인스턴스 생성을 관리하며, 객체 간의 의존성을 설정 파일이나 어노테이션을 통해 주입합니다. 이를 통해 객체 생성과 주입을 중앙에서 제어할 수 있게 됩니다.
5. IoC를 사용하면서 발생할 수 있는 단점은 무엇인가요?
IoC의 단점으로는 의존성 주입을 위해 별도의 설정 파일이 필요하며, 객체 간의 관계가 코드가 아닌 외부에서 설정되기 때문에, 코드 흐름이 복잡해져 이해하기 어려워질 수 있다는 점이 있습니다. 또한, IoC를 적용하지 않는 단순한 프로그램에서는 오히려 코드가 불필요하게 복잡해질 수 있습니다.
6. IoC는 반드시 사용해야 하나요? 모든 프로젝트에서 IoC가 필요한가요?
IoC는 복잡한 객체 관계와 의존성이 많은 대규모 프로젝트에서 특히 효과적입니다. 반면, 간단한 애플리케이션에서는 IoC의 이점이 오히려 덜할 수 있으며, 코드가 더 복잡해질 수도 있습니다. IoC가 필요하지 않은 프로젝트에서는 객체가 직접 의존성을 생성하거나 사용하는 편이 더 나을 수도 있습니다.
7. Spring에서 사용하는 IoC 컨테이너의 종류는 무엇인가요?
Spring에서는 두 가지 주요 IoC 컨테이너가 있습니다: BeanFactory와 ApplicationContext입니다. BeanFactory는 기본적인 IoC 컨테이너로, 지연 로딩(lazy loading)을 지원하며 메모리를 절약하는 데 유리합니다. 반면 ApplicationContext는 BeanFactory를 확장한 것으로, 이벤트, 국제화, AOP 지원 등 다양한 기능을 제공해 대부분의 애플리케이션에서 더 많이 사용됩니다.
8. IoC와 AOP(Aspect-Oriented Programming)의 차이점은 무엇인가요?
IoC는 객체의 제어권을 외부로 넘겨 의존성 주입을 통해 객체 간 결합도를 낮추는 개념이고, AOP는 공통 기능(로깅, 보안 등)을 분리하여 코드의 중복을 줄이는 개념입니다. AOP는 IoC 컨테이너와 함께 동작하면서 비즈니스 로직과 분리된 기능을 효율적으로 적용할 수 있도록 합니다
9. IoC를 구현하는 방법에는 어떤 것들이 있나요?
IoC는 주로 DI(Dependency Injection)를 통해 구현됩니다. 의존성 주입 방식에는 생성자 주입, 세터 주입, 필드 주입 등이 있습니다. 이 외에도 서비스 로케이터 패턴을 활용해 IoC를 구현할 수 있지만, 의존성을 외부에서 주입받는 DI 방식이 더 많이 사용됩니다.
10. Spring에서 @Autowired와 @Resource의 차이점은 무엇인가요?
@Autowired는 Spring 전용 애너테이션으로, 타입 기준으로 의존성을 주입합니다. 같은 타입의 빈이 여러 개일 때 @Qualifier를 사용해 특정 빈을 지정할 수 있습니다. 반면, @Resource는 JSR-250 표준 애너테이션으로 이름을 기준으로 주입하며, 이름이 없을 경우 타입으로 주입됩니다. 외부 라이브러리나 타 프레임워크와 호환성을 고려할 때 @Resource가 사용되기도 합니다.
'면접 예상 질문 모음!' 카테고리의 다른 글
배치시스템,spring batch-면접예상질문 (0) | 2024.11.18 |
---|---|
동기, 비동식 처리 방식-면접 예상 질문 (0) | 2024.11.11 |
스프링 빈- 면접 예상 질문 (0) | 2024.11.11 |
스프링 빈 주입시 생기는 문제들 -면접 예상 질문 (0) | 2024.11.10 |
클래스, 인스턴스 (0) | 2024.11.10 |