Contents
My thoughtsMy thoughts
저는 소스 파일에서 항상 최상위 모듈을 선언해서 필요한 기능을 사용해왔습니다. 예를 들어
Foundation
모듈에 내장된 기능이 필요하면 아래와 같이 해당 모듈을 명시하는 것입니다:import Foundation
그런데 최근 사이드 프로젝트를 진행하다가 작업자 한 분이 모듈 내장 기능 일부를 개별 선언을 한 것을 보고 선언 방법에 대해 고민하게 되었습니다.
Umbrella frameworks라는 개념이 있는데 여러 하위 모듈을 포함하기 때문에 유연하지 않습니다:
import <#module#>.<#submodule#>
- 모듈의 전체 크기가 증가하기 때문에 컴파일 시간이나 빌드 시간이 늘어날 수 있음
- 하위 모듈을 수정, 테스트해야 하는 경우 작업 효율성이 떨어질 수 있음
만약 직접 제작한 모듈을 사용하는 경우라면 문제가 발생할 여지가 있다고 생각했습니다. 따라서 꼭 필요한 방식이 아니라면 중요하게 생각하지 않는 것이 맞다고 봅니다.
Developer 포럼에서도 최상위 모듈을 선언해서 사용하는 개발자들을 볼 수 있는데,
import
구문을 사용할 때 형태나 구체성을 고려하기 보다 명확한 선언 방식을 선호하는 것을 확인할 수 있습니다:- 완벽한 import 자동화 기능을 따로 제공하지도 않음
- 실질적인 이점이 충분하지 않음
개인적으로도 최상위 모듈을 선언해서 사용하면 다음과 같은 이점이 있었습니다:
- 모듈의 독립성 보장
- 다른 모듈과 의존성을 최소화하고 있음을 쉽게 확인할 수 있음
- 명확성
- 최상위 모듈로 명시하면 특정 기능이 어느 모듈에서 가져온 것인지 빠르게 파악할 수 있음
- 가독성
- 소스 파일의 헤더 부분을 늘리거나 불필요하게 범위를 제한할 필요가 없음
만약 서로 다른 모듈에서 동일한 심볼 이름을 사용하고 있어 충돌(ambiguous)하는 경우에는 아래와 같은 형태로 사용하는 것도 좋아보입니다:
import <#kind#> <#module#>.<#symbol name#>
결국 컴파일러는 사용하지 않는 코드라면 해석 과정에서 제외하기 때문에 모듈을 제한해서 성능의 이점을 얻을 수 없습니다. 중요한 것은 다른 개발자가 자신의 소스 파일의 코드를 읽을 때 빠르게 파악할 수 있도록 적절한 선언 방식을 사용하는 것입니다.
References
Share article