IoC(제어의 역전)과 DI(의존성 주입)

Dami·2023년 10월 30일
0

SPRING

목록 보기
3/14
post-thumbnail

IoC(Inversion of Control) : 제어의 역전

객체의 생성과 관리를 개발자가 직접 제어하는 것이 아닌!
외부 컨테이너나 프레임워크(ex. Spring) 에 의해 제어되도록 하는 것을 의미

즉, 주변 시스템이나 라이브러리를 호출하는 것이 아닌, 프레임워크(or 컨테이너)가 주체가 되어 사용자의 코드를 호출하는 구조를 말한다.
다시 말해 개발자가 제어를 하지 않고 프레임워크에 제어를 맡기는 의미가 된다.

장점

  • 모듈 간 결합도↓
  • 코드 재사용성↑
  • 테스트 및 유지보수 쉬워짐

DI(Dependency Injection) 의존성 주입

DI는 IoC의 한 형태로, 객체가 필요하는 의존성을 외부에서 주입하는 것을 의미한다.
이게 무슨말이냐?

코드 예시를 통해 살펴보자!
Person.java

public class Person {
    private String name;
    
    public Person(String name){
        this.name = name;
    }

    public void buyPhone(Phone phone){
        System.out.println(name + "님이 " + phone.getBrand() + "을 샀습니다." );
        turnOnPhone(phone);
    }

    public void turnOnPhone(Phone phone){
        System.out.println(name + "님이 " + phone.getBrand() + "을 켰습니다.");
        phone.turnOnMessage();
    }
}

위 코드에서 Person class 는 특정 폰 브랜드에 의존하지 않게 되어 있다.
buyPhone method를 통해서 어떤 브랜드의 폰이든지 받아들일 수 있기 때문!
Main 클래스에서 samsung 폰과 apple 폰을 person 객체에 주입한다.

장점

  • 객체 간 결합도↓
  • 코드의 유연성&확장성↑

1개의 댓글

comment-user-thumbnail
2023년 10월 30일

답글 달기