다섯 살도 알 수 있게 · SW공학
의존성 주입/역전(DI/DIP)이 뭐예요?
DI/DIP를, 작가가 특정 기계에 직접 배선하는 대신 표준 콘센트만 알고 쓰는 이야기로 풀어봤어요.
작가가 특정 기계 한 대에 꽉 맞춰 원고를 써요.원고가 그 기계 배선에 그대로 박혀 있어요.
A사 전용 기계가 고장 나면 작가도 올스톱이에요.원고가 그 기계에 꽉 묶여 있어서, 작가는 꼼짝을 못 해요.
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 - 겉동작은 그대로 두고 구조를 고치는 일. 예: 직접 배선을 콘센트로 바꾸기. 줄거리는 그대로, 연결 구조만 다시 다듬어요. → 줄거리는 그대로, 문장만 다시 다듬기
다음 이야기
독자가 책을 쓱 넘겨보는 시험 →