Swift의 모듈(Module) 개념과 접근 제어와의 관계
Swift에서 “모듈(module)”은 접근 제어자(internal
, public
, open
)의 동작을 이해하는 데 핵심적인 개념
모듈(Module)
- Swift에서 모듈은 컴파일 단위이며, 하나의 코드 집합을 의미
- 모듈은 Swift 컴파일러가 구분하는 독립된 네임스페이스
모듈의 예시
구분 |
예시 |
앱 |
MyApp 전체가 하나의 모듈 |
프레임워크 |
RxSwift , Alamofire 등 |
테스트 |
MyAppTests 는 별도 모듈 |
SPM |
Swift Package의 각 target |
CocoaPods |
pod마다 모듈로 분리 |
접근 제어자와 모듈의 관계
접근 제어자 |
같은 파일 |
같은 타입 |
같은 모듈 |
외부 모듈 |
private |
✅ |
✅ |
❌ |
❌ |
fileprivate |
✅ |
✅ |
✅ |
❌ |
internal |
✅ |
✅ |
✅ |
❌ |
public |
✅ |
✅ |
✅ |
✅ (읽기만) |
open |
✅ |
✅ |
✅ |
✅ (읽기/override) |
모듈 간 접근 제어
📄 MyFramework (모듈 A)
1 2 3 4
| internal class SecretHelper {} public class APIManager { public func request() {} }
|
📄 MyApp (모듈 B)
1 2
| let api = APIManager() let secret = SecretHelper()
|
모듈이 생성되는 경우
1. 앱 자체는 기본적으로 하나의 모듈
2. CocoaPods / SPM / Framework
Alamofire.Session
이 public
혹은 open
으로 선언돼 있기 때문에 접근 가능
실무에서의 사례
✅ 라이브러리 외부 공개
1 2 3
| public class APIClient { public func request() {} }
|
- 라이브러리 사용자는
import
후 해당 클래스 사용 가능
❌ 라이브러리 내부 전용
1
| internal class SecretLogic {}
|
요약
- 모듈은 Swift의 컴파일 단위이자 접근 제어의 경계
internal
은 같은 모듈 내에서만 접근 가능
public
은 외부에서 접근만 가능
open
은 외부에서 접근 + 오버라이드 모두 가능
- 라이브러리 설계 시 공개 범위를 조절하는 데 매우 중요
적절한 모듈화와 접근 제어 설계는 유지보수성과 API 안정성에 큰 영향을 준다.
신경써서 구분하고 더 자세히 알고쓰자!!!!!!!!!! 화이팅!!!!!