Menu
Menu
Posts List
  1. Swift의 모듈(Module) 개념과 접근 제어와의 관계
    1. 모듈(Module)
    2. 모듈의 예시
    3. 접근 제어자와 모듈의 관계
    4. 모듈 간 접근 제어
      1. 📄 MyFramework (모듈 A)
      2. 📄 MyApp (모듈 B)
    5. 모듈이 생성되는 경우
      1. 1. 앱 자체는 기본적으로 하나의 모듈
      2. 2. CocoaPods / SPM / Framework
    6. 실무에서의 사례
      1. ✅ 라이브러리 외부 공개
      2. ❌ 라이브러리 내부 전용
    7. 요약

모듈과 접근 제어와의 관계

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()     // ✅ public 접근 가능
let secret = SecretHelper() // ❌ internal은 외부 모듈에서 접근 불가

모듈이 생성되는 경우

1. 앱 자체는 기본적으로 하나의 모듈

1
// AppDelegate.swift 등 전체 코드가 "MyApp"이라는 모듈에 포함됨

2. CocoaPods / SPM / Framework

1
import Alamofire // Alamofire는 외부 모듈
  • Alamofire.Sessionpublic 혹은 open 으로 선언돼 있기 때문에 접근 가능

실무에서의 사례

✅ 라이브러리 외부 공개

1
2
3
public class APIClient {
public func request() {}
}
  • 라이브러리 사용자는 import 후 해당 클래스 사용 가능

❌ 라이브러리 내부 전용

1
internal class SecretLogic {}
  • 외부 모듈에서는 사용 불가

요약

  • 모듈은 Swift의 컴파일 단위이자 접근 제어의 경계
  • internal은 같은 모듈 내에서만 접근 가능
  • public은 외부에서 접근만 가능
  • open은 외부에서 접근 + 오버라이드 모두 가능
  • 라이브러리 설계 시 공개 범위를 조절하는 데 매우 중요

적절한 모듈화와 접근 제어 설계는 유지보수성과 API 안정성에 큰 영향을 준다.
신경써서 구분하고 더 자세히 알고쓰자!!!!!!!!!! 화이팅!!!!!