DI, IOC, DIP

박찬욱·2023년 10월 5일
0

TIL

목록 보기
18/21

IOC란?

참고자료

IOC는 제어역전이라는 의미이다. 용어 그대로 코드의 흐름이 일반적인 흐름이 아닌 역전이 되었다는 뜻이다.

참고자료에서 나온 것처럼 택시를 탈 때 우리는 기사님에게 몇 키로로 어디 지역을 지나서 등등 세부적인 명령을 내리지 않는다.

집으로 가주세요. 라는 말만하면 기사님이 알아서 집까지 데려다주신다.

즉, 상위모듈에서 하위모듈에게 세부적인 정보를 전달하는 것이 아니라 구체적인 구현을 하위모듈에서 진행하고 상위모듈에게 전달하는 방법이다.

다른말로 메서드나 객체의 호출 작업을 개발자가 직접 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

DI

DI는 의존성주입을 의미한다.

class 호밀빵 {}
class 햄버거 {
  constructor() {
    this.호밀빵 = new 호밀빵();
  }
}

호밀빵은 햄버거클래스를 이용해 인스턴스를 생성하는 순간 동등하게 생성이 된다.
이것은 클래스 내부에서 constructor를 통해 의존성을 갖게되는 것이다.

의존성 주입이라는 말답게 외부에서 인스턴스를 생성해 주입시켜보자.

  1. 생성자를 통한 주입
class 호밀빵 {}
class 햄버거 {
  constructor() {
    this.=;
  }
}

const hambuger = new 햄버거(new 호밀빵());
  1. setter를 통한 주입
class 호밀빵 {
  constructor() {
    this.name = '호밀빵';
  }
}

class 햄버거 {
  constructor() {
    this.bread;
  }

  set setBread() {
    this.bread =;
  }

  cook() {
    console.log(`${this.bread.name}으로 만든 햄버거!`);
  }
}

const hambuger = new 햄버거();
hambuger.setBread = new 호밀빵();
hambuger.cook();

DIP

DIP는 의존 역전의 원칙을 의미한다. 의존 역전의 원칙이란 위에서 설명한 것과 같이 생각한다면 상위 모듈은 하위 모듈에 의존해서는 안된다.
그렇다면 어디에 의존해야하는가? 두 모듈 모두 추상화에 의존해야한다.

예를 들어보자.
요리를 할 수 있는 다양한 재료들이 있다. 햄버거, 피자, 치킨 등등...
그런데 요리를 할 수 없는 재료들도 있다. 신발로 어떻게 요리할 것인가?

그런데 요리사라는 객체가 요리 재료들을 주입받을 때 신발을 받게된다면?
손님들에게 신발이 음식으로 나가는 끔찍한 상황이 벌어질 수 있다.

그렇기 때문에 요리사라는 상위 모듈은 먹을 수 있는 것들이라는 객체에 의존하며 햄버거, 피자, 치킨 등등은 먹을 수 있는 것들에 의존해야한다.

참고자료

profile
대체불가능한 사람이다

0개의 댓글

관련 채용 정보