객체 지향에서 볼 수 있는 원칙 중 하나로 한 객체는 하나의 역할과 책임 을 가진다.
위 원칙을 Spring의 3계층 파일로 확인해보면 아래와 같다.
- controller : 요청 & 응답
- service : 요구사항을 처리하는 실세
- repository : DB 관리
=> 여러 역할을 한번에 처리해도 실행에는 문제없으나 코드를 읽기 힘들고 유지보수가 힘들어진다.
=> 제어의 역전 & 의존성 주입
Ioc(Inversion of Control)
=> 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 기져와 사용하는 것
DI(Dependency Injection)
=> 제어의 역전을 구현하기 위해 사용하는 방법
=> 어떤 클래스가 다른 클래스에 의존
Spring 예제
# Controller
* 생성자 주입으로 의존성 주입
private final MemoService memoService;
*Controller 에서 사용할 수 있도록 주입해주는 과정
public MemoController(MemoService memoService){
this.memoService = memoService;
}
# 타 클래스
MemoController sample = new MemoController(new MemoService());
** Chicken 과 pizza 는 Food를 implements 받음
Food food;
Consumer consumer = new Consumer();
consumer.food = new Chicken(); or new Pizza();
consumer.eat();
public void setFood(Food food) {
this.food = food;
}
Consumer consumer = new Consumer();
consumer.setFood(new Chicken());
consumer.eat();
public Consumer(Food food) {
this.food = food;
}
Consumer consumer = new Consumer(new Chicken());
consumer.eat();
consumer = new Consumer(new Pizza());
consumer.eat();
좋은 글 감사합니다!