도메인 모듈의 정보은닉을 할 때 중요하게 생각해야 할 점은 상태와 동작을 잘 숨기는 것입니다. 상태는 일단 private 하게 만드는 것이 좋습니다. 예를 들어 제가 목이 마른 상태인데 친구가 내 상태를 알아서 “너 목이 마르는구나! 내가 물을 줄게”라고 하는 것이 아닌 친구는 내가 목마른 상태인지 모르는 상황에서 “내가 물을 줄게”라고 했을 때, 내가 목이 마르면 물을 줄 것이고, 목마르지 않다면 물을 안 줘도 되는 것입니다. 이렇게 모듈의 상태는 일단 숨기고 숨긴 상태에서 행동으로 협력하는 것입니다. 그렇다면 모듈의 행동은 어떤 식으로 설계하면 좋을지 살펴보겠습니다.
1️⃣ 모듈에 대응되는 View에 제공할 동작
2️⃣ 모듈 내부에 감추어야 할 동작
3️⃣ 다른 모듈에 인터페이스로 제공할 동작
TCA 아키텍처에서는 크게 세 가지로 모듈의 동작을 나누어 설계하는 방법을 선택하면 효율적으로 모듈 간 협력이 가능합니다. 모듈 간 협력에서 중요하게 지켜야 할 룰 두 가지는
☝️모듈 간 협력은 1 depth 의 관계만 접근할 수 있다.
간단한 설명으로 ‘A’가 있고 ’A의 친구’ B, ‘A는 모르는 B의 친구 C’가 있다고 생각해봅시다. A와 B는 자연스럽게 협력이 되지만, A는 C를 알 필요가 없기 때문에 A와 C사이에 협력은 필요하지 않습니다. 만약 A와 C의 협력이 필요하다면 B의 도움을 거쳐 협력을 해야 합니다.
✌️ 다른 모듈에 인터페이스로 제공할 동작만 접근할 수 있고 나머지 두 가지 동작은 무조건 감춰져야 한다.
이 원칙은 OOP에서 가장 중요한 원칙 중 하나이며, 객체 간의 협업을 넘어 개발팀의 협업을 원활하게 만들어주는 중요한 룰입니다.
모듈에 대한 일관된 구조를 사용하면 API 확장에 대한 용이성과 서비스 안정성을 얻을 수 있습니다. 가장 큰 장점은 개발팀의 협업에 큰 도움을 준다는 것입니다. TCA가 발전해나가는 방향에 대해서 너무 긍정적이고 기쁩니다. 앞으로 많은 iOS앱들이 TCA로 개발되기를 바라며 저 역시도 그 과정에서 많은 도움이 되기를 바라고 있습니다.🙌