본문 바로가기

Swift '문법'

접근제한자

Swift에서 접근 제한자는 클래스,구조체,열거형 및 이들의 멤버에 대한 접근을 제어하는 데 사용됩니다.

Swift의 접근 제한자는 다음과 같다.

Open

설명: 모듈 내외부 어디서든 접근 및 서브클래싱, 오버라이딩 가능. 주로 프레임워크와 라이브러리의 공용 API를 만들 때 사용.

예제:

open class OpenClass {
    open func openMethod() {
        print("This method can be overridden.")
    }
}

Public

설명: 모듈 외부에서도 접근 가능하지만, 서브클래싱 및 오버라이딩은 불가능. 주로 모듈의 공용 API를 정의할 떄 사용.

예제:

public class PublicClass {
    public var publicProperty: Int = 0
    public func publicMethod() {
        print("This method can be called but not overridden.")
    }
}

Internal

설명: 기본 접근 수준. 동일 모듈 내에서 접근 가능. 다른 모듈에서는 접근 불가능.

예제:

class InternalClass {
    var internalProperty: Int = 0
    func internalMethod() {
        print("This method is internal.")
    }
}

Fileprivate

설명: 동일 파일 내에서만 접근 가능.

예제:

class FileprivateClass {
    fileprivate var fileprivateProperty: Int = 0
    fileprivate func fileprivateMethod() {
        print("This method is fileprivate.")
    }
}

Private

설명: 동일 선언 내부에서만 접근 가능. 클래스 또는 구조체 내부에서만 접근 가능하며, 같은 파일 내다른 클래스나 구조체에서도 접근 불가능.

예제:

class PrivateClass {
    private var privateProperty: Int = 0
    private func privateMethod() {
        print("This method is private.")
    }
}

접근 제한자의 사용 예시

open class OpenClass {
    open func openMethod() {
        print("Open method")
    }
}

public class PublicClass {
    public var publicProperty = 0
    public func publicMethod() {
        print("Public method")
    }
}

class InternalClass {
    var internalProperty = 0
    func internalMethod() {
        print("Internal method")
    }
}

fileprivate class FileprivateClass {
    fileprivate var fileprivateProperty = 0
    fileprivate func fileprivateMethod() {
        print("Fileprivate method")
    }
}

class PrivateClass {
    private var privateProperty = 0
    private func privateMethod() {
        print("Private method")
    }
}

요약

Open: 모듈 내외부에서 접근, 서브클래싱, 오버라이딩 가능

Public: 모듈 내외부에서 접근 가능, 서브클래싱 및 오버라이딩 불가

Internal: 동일 모듈 내에서 접근 가능

Fileprivate: 동일 파일 내에서 접근 가능.

Private: 동일 선언 내부에서만 접근 가능.

각 접근 제한자는 데이터 은닉성과 클래스의 인터페이스를 어떻게 설계할지에 중요한 역할을 합니다. 필요한 경우에 맞는 접근 수준을 선택하여 코드의 안정성과 유지보수성을 높일 수 있습니다.

'Swift '문법'' 카테고리의 다른 글

프로퍼티 옵저버  (0) 2024.08.06
ARC와 메모리 누수  (0) 2024.08.02
프로토콜(Protocols)  (0) 2024.07.31
for - in 반복문  (1) 2024.07.24
while  (0) 2024.07.23