DI 와 IOC
DI (Dependency Injection)
- 정의: DI는 의존성 주입이라고도 하며, 객체가 필요로 하는 의존성을 외부에서 주입받는 패턴입니다. 이를 통해 객체 간의 결합도를 낮추고 코드의 재사용성과 테스트 용이성을 향상시킬 수 있습니다.
- 목적: 직접적인 의존성 생성 없이 객체의 의존성을 관리하며, 유연한 코드 변경을 가능하게 합니다.
- 방식: Constructor Injection, Setter Injection, Method Injection 등 여러 방식이 있습니다.
IoC (Inversion of Control)
- 정의: IoC는 프로그램의 제어 흐름을 역전시키는 개념입니다. 전통적인 프로그래밍에서는 주 프로그램이 서브 루틴을 호출하지만, IoC에서는 프레임워크나 서비스가 주 프로그램의 흐름을 제어합니다.
- 목적: 모듈 간의 결합도를 낮추고 확장성 및 유연성을 향상시키기 위함입니다.
- 예시: 스프링 프레임워크의 IoC 컨테이너가 대표적인 예입니다.
객체 지향 프로그래밍 (Object-Oriented Programming, OOP)
- 정의: 객체 지향 프로그래밍은 데이터와 함수를 객체라는 단위로 묶어서 프로그래밍하는 방식입니다.
- 기본 원칙:
- 캡슐화 (Encapsulation): 데이터와 이 데이터를 처리하는 함수를 하나의 단위(객체)로 묶는 것.
- 상속 (Inheritance): 이미 정의된 클래스의 특성을 다른 클래스가 물려받는 것.
- 다형성 (Polymorphism): 같은 이름의 메서드가 다른 동작을 하는 것.
- 추상화 (Abstraction): 복잡한 시스템을 간단한 개념으로 나타내는 것.
- 활용 방법:
- 재사용성: 이미 정의된 클래스나 객체를 다른 프로젝트나 부분에서 재사용할 수 있습니다.
- 유지 보수: 객체 지향 프로그래밍은 코드의 모듈화를 통해 유지 보수가 용이합니다.
- 확장성: 기존의 코드를 변경하지 않고 기능을 추가하거나 확장할 수 있습니다.
간단히 말하면, DI와 IoC는 객체 지향적 설계 원칙을 잘 활용하여 소프트웨어의 유연성, 확장성 및 재사용성을 향상시키는 데 중요한 역할을 합니다. 객체 지향 프로그래밍은 데이터와 기능을 객체라는 단위로 묶어서 소프트웨어를 더욱 모듈화하고 조직화하는 방식입니다.