의존성 주입(Dependency Injection - DI)
제어의 역전(Inversion of Control - IoC)
스프링에서는 프로그램의 흐름을 프레임워크가 주도하게 된다.
객체의 생성~생명주기 관리를 컨테이너가 도맡아서 하는 것.
예를 들면 C같은 경우는 main에서 시작해서 따라가는데, Spring은 @어노테이션 으로 관리되는것
즉, 제어의 주도권이 개발자 코드에서 컨테이너 또는 프레임워크로 넘어가는 것을 의미합니다.
DI는 IoC를 구현하는 방법 중 하나입니다. IoC는 코드의 제어 흐름을 역전시켜 객체의 생성, 생명주기, 의존성 관리 등을 외부에서 담당하게 하여 유연하고 확장 가능한 시스템을 만들 수 있도록 돕습니다.
IoC 컨테이너는 주로 DI를 통해 의존성을 주입하고, 객체의 생명주기를 관리하며, 애플리케이션의 제어를 담당합니다.
// 의존성 주입(Dependency Injection) 예시
public class Car {
private Engine engine;
// 생성자를 통한 의존성 주입
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
}
}
public class Engine {
public void start() {
System.out.println("Engine starting...");
}
}
// 제어의 역전(Inversion of Control) 예시
public class App {
public static void main(String[] args) {
// IoC 컨테이너에서 객체 생성 및 의존성 주입
Engine engine = new Engine();
Car car = new Car(engine);
// IoC 컨테이너에 제어의 주도권이 있음
car.start();
}
}
객체지향 프로그래밍(Object-Oriented Programming, OOP) :
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 '메소드와 변수'를 가지며, 특정 역할을 수행하도록 인간이 정의한, 추상적인 개념이다.
OOP는 코드의 재사용성, 유지보수성, 확장성 등을 향상시키는데 기여하며, 다음과 같은 주요 특징을 가지고 있습니다:
특징 :
이점 :