[Swift] @_exported

2024. 4. 1. 11:49🍏/Swift 기초 공부

@_exported import 키워드는 Swift에서 내부 모듈에서 사용된 외부 모듈을, 해당 내부 모듈을 사용하는 다른 모듈에서 별도의 import 없이 사용할 수 있게 해주는 기능입니다. 이는 모듈 간의 의존성을 관리할 때 편리함을 제공하지만, Swift 공식 문서에는 아직 내부적인 사용(_로 시작)을 의미하는 비공개 API로 분류되어 있으며, 향후 변경될 가능성이 있습니다.

사용 이유

  1. 간결성: 상위 모듈에서 하위 모듈의 기능이나 타입을 사용할 때, 모든 곳에 동일한 import 구문을 반복해서 작성할 필요가 없어 코드가 더 간결해집니다.
  2. 편의성: 특정 라이브러리나 프레임워크를 내부적으로 사용하는 모듈을 만들 때, 이 모듈을 사용하는 사용자가 내부적으로 사용된 라이브러리나 프레임워크에 대해 알 필요 없이 바로 사용할 수 있습니다.
  3. 모듈화: 모듈 간의 의존성을 간결하게 관리하며, 모듈화된 아키텍처를 지원합니다.

장점

  • 개발 편의성: 개발자가 모듈을 사용할 때 필요한 모든 의존성을 일일이 import할 필요가 없으므로, 더 빠르고 쉽게 개발할 수 있습니다.
  • 코드 간소화: 중복 import 구문을 줄일 수 있어 코드 베이스를 간소화하고, 가독성을 향상시킵니다.
  • 재사용성 증가: 공통 모듈을 다양한 프로젝트나 모듈에서 더 쉽게 재사용할 수 있습니다.

단점

  • 명시성 감소: 어떤 모듈에서 어떤 의존성이 사용되고 있는지 직관적으로 파악하기 어려워질 수 있습니다. 이로 인해 코드의 이해도와 유지보수성이 저하될 수 있습니다.
  • 네임스페이스 충돌: 여러 모듈이 같은 이름의 타입이나 함수를 export하는 경우, 예상치 못한 충돌이 발생할 수 있습니다.
  • 비공개 API 사용의 위험: @_exported는 현재 비공개 API로, 향후 Swift 버전에서 변경되거나 제거될 가능성이 있습니다. 따라서, 이를 사용하는 코드는 향후 호환성 문제에 직면할 수 있습니다.

@_exported import의 사용은 편의성과 간결성을 제공하지만, 코드의 명시성과 유지보수성을 저하시킬 수 있는 잠재적인 단점이 있습니다. 따라서, 이를 사용할 때는 장단점을 충분히 고려하고, 필요한 경우에만 제한적으로 사용하는 것이 좋습니다.


예시

Feature > Domain > Core > Shared 순으로 @_exported가 되어있는 경우 Shared의 기능을 Feature이 알 수 있고, 사용가능 하다.