모듈
- 프로그램의 기능을 독립적으로 분리한 것을 모듈이라고 한다(Naver)
쉽게 특정 기능별로 나누어진 프로그램 덩어리
수 많은 코드를 짠다고 할 때 모든 코드를 1개의 파일에 작성할 경우 몇만줄의 코드를 일일히 읽기란 본인이 작성한 코드여도 힘들며, 다른 개발자가 작성했다면 더욱 힘들것이다. 그로인해 유지보수성과 재사용성이 매우 감소한다.
이를 방지하기위해 효율적이고 재사용 가능하도록 코드를 작성하려고 개발자는 노력해야한다.
이때 유용한게 모듈화이다.
모듈화가 잘 되어있다면 내가 아니라 다른사람이 내가 만들어 놓은 기능을 필요로 할 때에도 사용될 수 있다.
즉, 다른 프로그램의 부품으로도 사용이 가능해진다.
모듈화의 장점
1. 빌드 속도 감소.
XCode는 빌드시 빌드 결과를 폴더에 저장해놓고 해당 폴더를캐싱하는 방식으로 빌드한다. 그 폴더의 이름은 'DerivedData'이다.
DerivedData 하위에 ModuleCache.noindex라는 폴더가 있는데 이 폴더에서는 모듈에 대한 정보를 저장해놓고 xcode가 빌드할 때 이 정보를 캐싱해서 사용한다. 모듈에 수정된 코드가 없다면 캐싱된 모듈 정보를 사용하고 코드가 수정되었다면 수정된 모듈에 대해서만 재빌드 하기 떄문에 빌드 속도가 빨라진다.
* Xcode에서 클린빌드 하면 삭제되는 파일이 'DerivedData/프로젝트이름/~~/bulid'이다.
2. 결합도 감소
1) 코드의 오염
코드를 물리적으로 분리하지 않고 한개의 프로젝트에 위치시키는 경우 프로젝트 내부에서 *Internal로 접근이 가능해진다.
그로 인해 결합도가 높아진다. 모듈로 물리적 분리를 하면 오픈 인터페이스에서만 접근할 수 있기 때문에 코드의 오염을 줄일 수 있다.
*Internal: Default제어자로 entity가 작성된 모듈에서 접근 가능하다.
2) 코드의 검증
모듈을 분리한 경우 Host앱과 완전히 분리되어있다. 그로인해 데모앱, 테스트로 분리된 모듈을 검증할 수 있다.
프로젝트의 규모가 커지면 빌드 시간이 오래걸려서 테스트하기 힘들어 진다. 하지만 모듈화를 하면 호스트앱과 분리되어 있기 때문에 빠르게 빌드하고 테스트할 수 있다.
레이어의 분리.
Feature
- Presentation부분
Domain
- Business Logic
- ex) Auth Domain, Profile Domain
Core
- Feature, Domain에 쓰일 공통적 모듈
- ex) Networking Module, Database Module
Share
- 모든 계층에서 사용할 모듈
- 더 넓은 의미의 공통적