[Swift] @_exported
2024. 4. 1. 11:49ㆍ🍏/Swift 기초 공부
@_exported import 키워드는 Swift에서 내부 모듈에서 사용된 외부 모듈을, 해당 내부 모듈을 사용하는 다른 모듈에서 별도의 import 없이 사용할 수 있게 해주는 기능입니다. 이는 모듈 간의 의존성을 관리할 때 편리함을 제공하지만, Swift 공식 문서에는 아직 내부적인 사용(_로 시작)을 의미하는 비공개 API로 분류되어 있으며, 향후 변경될 가능성이 있습니다.
사용 이유
- 간결성: 상위 모듈에서 하위 모듈의 기능이나 타입을 사용할 때, 모든 곳에 동일한 import 구문을 반복해서 작성할 필요가 없어 코드가 더 간결해집니다.
- 편의성: 특정 라이브러리나 프레임워크를 내부적으로 사용하는 모듈을 만들 때, 이 모듈을 사용하는 사용자가 내부적으로 사용된 라이브러리나 프레임워크에 대해 알 필요 없이 바로 사용할 수 있습니다.
- 모듈화: 모듈 간의 의존성을 간결하게 관리하며, 모듈화된 아키텍처를 지원합니다.
장점
- 개발 편의성: 개발자가 모듈을 사용할 때 필요한 모든 의존성을 일일이 import할 필요가 없으므로, 더 빠르고 쉽게 개발할 수 있습니다.
- 코드 간소화: 중복 import 구문을 줄일 수 있어 코드 베이스를 간소화하고, 가독성을 향상시킵니다.
- 재사용성 증가: 공통 모듈을 다양한 프로젝트나 모듈에서 더 쉽게 재사용할 수 있습니다.
단점
- 명시성 감소: 어떤 모듈에서 어떤 의존성이 사용되고 있는지 직관적으로 파악하기 어려워질 수 있습니다. 이로 인해 코드의 이해도와 유지보수성이 저하될 수 있습니다.
- 네임스페이스 충돌: 여러 모듈이 같은 이름의 타입이나 함수를 export하는 경우, 예상치 못한 충돌이 발생할 수 있습니다.
- 비공개 API 사용의 위험: @_exported는 현재 비공개 API로, 향후 Swift 버전에서 변경되거나 제거될 가능성이 있습니다. 따라서, 이를 사용하는 코드는 향후 호환성 문제에 직면할 수 있습니다.
@_exported import의 사용은 편의성과 간결성을 제공하지만, 코드의 명시성과 유지보수성을 저하시킬 수 있는 잠재적인 단점이 있습니다. 따라서, 이를 사용할 때는 장단점을 충분히 고려하고, 필요한 경우에만 제한적으로 사용하는 것이 좋습니다.
예시
Feature > Domain > Core > Shared 순으로 @_exported가 되어있는 경우 Shared의 기능을 Feature이 알 수 있고, 사용가능 하다.
'🍏 > Swift 기초 공부' 카테고리의 다른 글
[Swift] 불투명 반환 타입 / Equatable (0) | 2023.04.15 |
---|---|
[Swift] (복습) Struct & Class / 구조체 & 클래스 (0) | 2022.09.01 |
[Swift] (기초) Extension / 익스텐션 (0) | 2021.09.11 |
[Swift] (기초) Protocol / 프로토콜 (0) | 2021.09.01 |
[Swift] (기초) Assert & Guard / Assertion / Early Exit / Guard (0) | 2021.09.01 |