본문 바로가기

Android/Architecture

[Android] Coordinator Pattern

728x90

클린 아키텍처 구조에 대해서 공부하던 도중, 동료 ios 개발자에게 Coordinator Pattern 이라는 것을 들었다.

 

ios 개발에 있어서 주로 사용하는 디자인 패턴으로 보이지만,

프로젝트를 모듈화 시켰을 때, 해당 디자인 패턴을 사용하여 화면(Activity)간의 이동을 한다면 조금 더 깔끔하게, 의존성 문제 없이 모듈화를 진행할 수 있을 것이라 생각하여 해당 디자인 패턴에 대해 알아보고자 한다.


안드로이드에서는 해당 디자인 패턴을 사용하지 않기 때문에 안드로이드 기준의 자료는 거의 존재하지 않는 것으로 보인다. 따라서, swift(IOS) 에서 사용하는 Coordinator Pattern 의 글을 참고하여 기본 개념에 대해서 알아보았다.

 

우선, Coordinator Pattern 을 사용하는 이유

화면(View) 간의 연결과 그 의존성에 대하여 분리 하여 관리하기 위하여

사용한다고 생각하면 된다.

 

간단하게 말하자면,

  • 화면간의 이동을 담당하는 클래스를 하나 만들어두고,
  • 해당 클래스를 사용하여 모든 화면간의 이동을 수행시킨다.

 

아주 간단한 디자인 패턴이지만 이것을 왜 사용해야 하는가에 대해서 생각해보자.ios 와 다르게 Android 에서는 Activity 를 이동 할 때 해당 클래스를 참조할 수 있으면 단순히 인텐트로 호출하기만 하면 된다. 따라서 이런 패턴을 사용하는 것에 대해 메리트가 존재하지 않는다.

 

그렇다면 이동할 Activity 가 현재 보여지고 있는 Activity 와 서로 다른 모듈에 있다면 어떻게 해야하는가?gradle 에서 해당 모듈에 대한 참조를 추가해주면 된다.여기까지만 봐서는 이 경우에도 코디네이터 패턴을 사용할 이유는 보이지 않는다.

 

하지만, A 모듈의 Activity 와 B 모듈의 Activity 가 서로의 Activity 로 이동이 가능해야한다면 어떻게 해야할까?

간단하게 각 모듈 끼리 참조해서 사용하면 된다. 라고 생각할 수 있겠지만, 상호 참조가 발생하게 되면 빌드 시에 오류가 발생하기 때문에 상호 참조를 사용할 수 없다.

 

필자는 이 때 Coordinator Pattern을 사용하면 간단히 해결되지 않을까 생각했다.


예제를 만들어보기 앞서, 위의 문제를 해결하기 위해

어떤식으로 Coordinator Pattern 을 구현할지 생각해보자.

 

우선, 다중 모듈 구조에서 상호 참조는 되서는 절대로 안되기 때문에 모듈간의 이동은 하나의 메인 모듈을 사용해서 한다고 생각해야 한다.

그렇다면, 메인 모듈에서는 이동 가능한 모든 모듈(View Module) 에 대한 참조를 가지고 있어야 한다.

 

 

필자는 앱이 실행되기 위해 필요한 MainActivity 가 있는 Launcher Mudule 을 App Module 이라고 생각하였다.

다음과 같이 참조되고 있다면, A,B,C 모듈은 각각의 다른 모듈을 사용할 수 없고 App Module 을 통해서만 사용이 가능해 지게 된다.

 

 

이와 같이 FirstActivity 에서 SecondActivity 를 호출하기 위해서는 App Module 에 호출 요청을 하고, App Module 에서 직접 B Module 의 SecondActivity 를 호출하면 되는 것이다.

 

이런식으로 구현을 하게 된다면, Coordinator Pattern 을 사용하는 이유인 화면간의 연결과, 그 의존성을 분리할 수 있다.

즉, App 모듈을 사용해서 다른 모듈을 접근하기 때문에 각 모듈은 서로의 모듈에 대해 참조하고있지 않아도 되며 App 모듈만 이동 할 모듈에 대한 참조를 가지고 있으면 된다.

따라서, 다른 모듈의 변화에 대해 전혀 신경쓰지 않아도 되는 것이다.


물론 멀티 모듈 구조에서 사용하려고 하는 부분이기 때문에, 이처럼 간단하게 구현하지는 못할 것으로 생각된다.

어느 Module 에 Navigation Interface 와 호출 부분, Interface 구현 부분을 넣어야 할지, 어떤식으로 호출을 해야할지에 대해서, 구현 방법에 대해서는 좀 더 생각이 필요한 부분으로 보인다.

 

클린 아키텍처를 사용한 예제를 만들어 보았었는데, 멀티 모듈에 대한 개념도 추가로 넣어보고, 해당 패턴까지 사용하여 예제를 수정해 볼 예정이다.

 

Coordinator Pattern 을 사용한 예제는 GitHub 에 올려두었다.

https://github.com/HeeGyeong/ModuleArchitecture

 

GitHub - HeeGyeong/ModuleArchitecture

Contribute to HeeGyeong/ModuleArchitecture development by creating an account on GitHub.

github.com

 

728x90