티스토리 뷰

그럼 가장 안쪽 Layer에서 바깥 Layer로는 전혀 이동이 불가능한가?

 

 

Apdater는, “Domain과 Infrastructure 사이의 번역기 역할을 수행한다.” 라고 언급 했었다.

이 때 흐름은 Controller → Use case → Presenter로 흐르게 된다.

이처럼 제어의 흐름이 원의 내부에서 외부로 향하는 것을 Crossing Boundaries 라고 한다.

하지만 위 흐름을 그대로 따른다면 Dependency Rule을 위반하게 된다.

High-level인 Use case는 Low-level인 Presenter를 의존해서는 안되기 때문이다.

 

 

그래서 의존성 역전 원칙(DIP)을 적용하게 된다.

의존성 역전 원칙이란, 고수준 모듈이 저수준 모듈을 의존하는 것이 아니라, 저수준 모듈이 고수준 모듈에서 정의한 추상 클래스에 의존하는 것을 의미한다.

즉, 제어흐름의 방향과 반대로, 호출당하는 쪽에서 호출 하는 쪽으로 의존하는 것을 의미한다.

이를 통해 직접적인 의존성을 끊고 의존성을 낮출 수 있다.

 

 

의존성 역전 원칙을 적용하지 않은 흐름은 위 흐름과 같다.

의존성 역전 원칙을 적용하면 아래 흐름처럼 내부 Layer는 외부 Layer의 Interface(Protocol in Swift)를 참조하고, 외부 Layer에서 해당 Interface를 구현한다.

 

 

Clean Architecture에서의 흐름으로 보자면,

검은색 바탕 화살표는 호출하는 방향

하얀색 바탕 화살표는 해당 인터페이스를 구현한다는 의미

즉 위 사진의 의미는 다음과 같다.

Use case Interactor가 Use case Input Port를 구현하고,

Controller가 Use case Input Port Interface를 참조하고 있다가 호출한다.

Presenter가 Use case Output Port를 구현하고,

Use case Interactor가 Use case Output Port Interface를 참조하고 있다가 호출한다.

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함