[01] 모듈화(Modularization)
모놀리틱 앱 구조
- 리팩토링, 기능 수정, 기능 추가 등 변경이 있을 때, 곳곳에서 변경이 일어나며 사이드 이펙트가 알 수 없는 곳에서 터지기 쉽다.
- 단일 모듈상에서 객체간 참조 그래프가 매우 복잡해질 가능성이 크다. 그러다 보면 둘 이상의 객체가 서로 참조하는 순환참조를 이루게 되고, 이는 객체를 단독으로 쓸 수 없게 돼서 결국 여러 객체가 하나의 비대한 객체가 되게 된다.
또한 이렇게 됐을 때, 접근제한자를 적절히 사용할 수 없게 된다.
- 작은 변경이 어디까지 영향을 미칠지 파악하기가 힘들다.
- 모놀리틱 앱 구조에서는 앱 전체적으로 증가하는 빌드시간을 모든 개발자가 똑같이 감내해야한다. 아주 작은 코드의 변경조차도 앱으로 확인하기 위해 프로젝트 모든 소스코드가 전부 컴파일 되기를 기다려야한다.
모듈화 구조
- 잘 나뉘어진 모듈은 계층화 할 수 있다.
- 상위 모듈은 하위 모듈에 접근할 수 있지만, 하위 모듈은 상위 모듈에 접근하지 못하도록 코드를 단방향으로 설계하는게 중요하다. 단방향으로 구성된 앱은 순환참조가 일어나지 않아서 간결하고 명확한 앱 구조를 만들 수 있다. 그렇게 되면 간단하고, 명확하고 독립적인 모듈구조를 가져갈 수 있다.
- ex)
- interactor는 상위모듈
- repository, UI는 중위모듈
- Networking, Database는 하위모듈에 속한다.
- 다른 모듈에 숨기고 싶은 객체나 데이터는 internal로 숨겨서 무분별한 참조를 막을 수 있다. 외부로부터 차단이 되어있으면 변경이 일어났을 때, 모듈 내에서만 변경이 일어난다.
모듈화 구조의 장점
- 관심사가 분리된다.
- 코드 파악이 빠르다.