최상위 모듈을 가져와 사용하는 이유

Yujin Kim's avatar
Feb 11, 2024
최상위 모듈을 가져와 사용하는 이유

My thoughts

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

References

Share article
RSSPowered by inblog