Swift에서 접근 제어자(Access Control Levels)는 코드의 특정 부분(클래스, 구조체, 함수 등)에 대한 접근 범위를 제어하는 키워드입니다. 이를 통해 모듈 간, 파일 간, 혹은 코드 내에서 데이터와 기능의 노출 범위를 설정할 수 있습니다. Swift는 5가지 접근 제어 수준을 제공합니다: open, public, internal, fileprivate, private.
open과 public의 차이점open: 모듈 외부에서 접근 가능하며, 서브클래싱(subclassing)과 오버라이딩(overriding)이 모두 허용됩니다. 주로 프레임워크나 라이브러리에서 다른 모듈이 해당 클래스를 확장하거나 재정의할 수 있도록 설계할 때 사용됩니다.public: 모듈 외부에서 접근 가능하지만, 서브클래싱이나 오버라이딩은 불가능합니다. 외부에서 단순히 사용만 가능하도록 제한됩니다.open은 더 개방적이며 확장성을 제공하는 반면, public은 사용은 허용하되 내부 구현의 수정은 막습니다.open class MyOpenClass {
open func myMethod() {}
}
public class MyPublicClass {
public func myMethod() {}
}MyOpenClass는 다른 모듈에서 상속 및 오버라이딩 가능.MyPublicClass는 다른 모듈에서 사용만 가능.internal, fileprivate, private의 사용 시기internal: 모듈 내부에서만 접근 가능. Swift의 기본 접근 수준입니다. 같은 앱이나 프레임워크 내에서 자유롭게 사용되지만, 외부 모듈에는 노출되지 않습니다.fileprivate: 같은 파일 내에서만 접근 가능.private: 선언된 범위(클래스, 구조체 등) 내에서만 접근 가능. 가장 제한적인 수준입니다.internal) vs 파일(fileprivate) vs 선언 범위(private).private에 가까워짐.class MyClass {
internal var sharedInModule = "모듈 내 공유"
fileprivate var sharedInFile = "파일 내 공유"
private var hidden = "나만 사용"
}private로 설정된 속성은 외부에서 수정할 수 없으므로, 의도치 않은 상태 변화를 막을 수 있습니다.open과 public은 외부 접근을 허용하지만, 확장성에서 차이가 크다.internal, fileprivate, private는 노출 범위를 점점 좁히며, 상황에 맞게 선택해야 한다.