IoC DI 는 객체지향의 SOLID 원칙 그리고 GoF의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다SOLID :GoF :IoC = 설계원칙 DI = 디자인 패턴 에 해당
public class Consumer {
void eat() {
Chicken chicken = new Chicken();
chicken.eat();
}
public static void main(String[] args) {
Consumer consumer = new Consumer();
consumer.eat();
}
}
class Chicken {
public void eat() {
System.out.println("치킨을 먹는다.");
}
}
package Consumer;
public class Consumer {
void eat() {
Hamburger hamburger = new Hamburger(); //1
hamburger.eat(); //2
}
public static void main(String[] args) {
Consumer consumer = new Consumer();
consumer.eat();
}
}
class Chicken {
public void eat() {
System.out.println("치킨을 먹는다.");
}
}
class Hamburger { //3 클래스 추가
public void eat() {
System.out.println("햄버거를 먹는다.");
}
}
package Consumer;
public class Consumer {
void eat(Food food) {
food.eat();
}
public static void main(String[] args) {
Consumer consumer = new Consumer();
consumer.eat(new Hamburger());
consumer.eat(new Chicken());
}
}
interface Food {
void eat();
}
class Chicken implements Food {
@Override
public void eat() {
System.out.println("치킨을 먹는다.");
}
}
class Hamburger implements Food {
@Override
public void eat() {
System.out.println("햄버거를 먹는다.");
}
}
Hamburger 클래스만 추가해주어, 다형성을 활용하여 처리 하고 있는 모습이다Consumer → FoodFood → ConsumerConsumer 가 직접 Food를 만들어 먹었기 때문에 (아래코드)void eat() {
Hamburger hamburger = new Hamburger(); //1
hamburger.eat(); //2
}Food를 Consumer 에게 전달 해주는식void eat(Food food) {
food.eat();
}Food → Consumer) 로 역전되었다고 볼 수 있다SOLID : https://www.nextree.co.kr/p6960/
GoF : https://4z7l.github.io/2020/12/25/design_pattern_GoF.html