다섯 살도 알 수 있게 · SW공학

의존성 주입/역전(DI/DIP)이 뭐예요?

DI/DIP를, 작가가 특정 기계에 직접 배선하는 대신 표준 콘센트만 알고 쓰는 이야기로 풀어봤어요.

A사 전용 기계작가가 특정 기계 한 대에 꽉 맞춰 원고를 써요원고가 그 기계 배선에 그대로 박혀 있어요

작가가 특정 기계 한 대에 꽉 맞춰 원고를 써요.원고가 그 기계 배선에 그대로 박혀 있어요.

고장!다른 기계로 바꾸려면 원고를 다 뜯어고쳐야 해요원고가 그 기계에 꽉 묶여 있어서, 작가는 꼼짝을 못 해요

A사 전용 기계가 고장 나면 작가도 올스톱이에요.원고가 그 기계에 꽉 묶여 있어서, 작가는 꼼짝을 못 해요.

인쇄기 B작가는 표준 콘센트(규격)만 알고 쓰고, 어떤 기계를 꽂을지는 바깥에서 정해요편집장이 바깥에서 알맞은 기계를 꽂아 줘요(주입)

DI/DIP는 작가가 표준 콘센트만 알고 쓰고, 어떤 기계를 꽂을지는 바깥에서 정하는 거예요.편집장이 바깥에서 알맞은 기계를 꽂아 줘요(주입).

규격(추상)에만 의존세부 기계는 몰라도 돼요
바깥에서 꽂아줘요작가가 기계를 직접 고르지 않아요
교체가 쉬워요테스트용 가짜 기계도 꽂을 수 있어요
방향이 뒤집혀요작가와 기계 둘 다 콘센트 규격만 바라봐요
이전: 직접 배선기계를 바꾸려면 배선을 다 뜯어요이후: 표준 콘센트콘센트만 맞으면 기계는 뭐든 꽂아요테스트할 땐 진짜 기계 대신 가짜 기계(목업)를 꽂을 수도 있어요고수준 작가와 저수준 기계, 둘 다 콘센트 규격만 바라봐요

직접 배선 대신 표준 콘센트를 두면 바꿔 끼우기 쉬워요.고수준 작가와 저수준 기계, 둘 다 콘센트 규격만 바라봐요.

콘센트(규격)가 너무 많아지면 어떤 걸 써야 할지 헷갈려요필요한 곳에만 규격을 둬야, 바꿔 끼우기도 쉬워요

규격을 너무 많이 두면 오히려 헷갈려요.필요한 곳에만 규격을 둬야, 바꿔 끼우기도 쉬워요.

한 줄로

DIP = 작가(고수준)가 기계(저수준)에 직접 매이지 않고, 둘 다 표준 콘센트(추상)만 보게 하는 원칙. DI = 기계를 바깥에서 꽂아주는 기법.

의존성 역전 원칙(DIP)은 '고수준 모듈이 저수준 모듈에 의존하지 않고, 둘 다 추상(인터페이스)에 의존해야 한다'는 설계 원칙이고, 의존성 주입(DI)은 그 추상의 실제 구현체를 객체가 직접 생성하지 않고 외부에서 전달(주입)받는 구현 기법이에요. SOLID 원칙 중 D에 해당해요.

어른들은 이렇게 불러요

DIP(의존성 역전 원칙)
Dependency Inversion Principle
고수준과 저수준이 둘 다 규격만 바라보게 하는 원칙. SOLID 원칙의 D예요.
DI(의존성 주입)
Dependency Injection
기계를 바깥에서 꽂아주는 방법. 작가가 기계를 직접 만들거나 고르지 않아요.
인터페이스(추상)
Interface / Abstraction
표준 콘센트 그 자체. 세부 기계가 아니라 규격만 약속해요.
결합도(Coupling)
Coupling
작가와 기계가 묶인 정도. 직접 배선은 강한 결합, 콘센트는 느슨한 결합이에요.
정보은닉/캡슐화
Encapsulation
세부 기계를 작가 눈에 안 보이게 감추는 것. DIP가 기대는 또 다른 원칙이에요. → 작가의 잠긴 서랍
테스트 더블(Mock)
Test Double / Mock
테스트용 가짜 기계. 콘센트만 맞으면 진짜 기계 대신 꽂을 수 있어요.
제어의 역전(IoC)
Inversion of Control
흐름 제어를 내 코드 대신 바깥 틀(프레임워크)이 맡는 것. DI는 IoC의 한 가지 형태예요.
리팩터링
Refactoring
겉동작은 그대로 두고 구조를 고치는 일. 예: 직접 배선을 콘센트로 바꾸기. 줄거리는 그대로, 연결 구조만 다시 다듬어요. → 줄거리는 그대로, 문장만 다시 다듬기
다음 이야기
독자가 책을 쓱 넘겨보는 시험 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →