🔥 프로토콜의 접근 제어

335자
5분

프로토콜을 정의할 때 명시적인 접근 수준을 할당하면, 특정 접근 컨텍스트 내에서만 채택할 수 있는 프로토콜을 만들 수 있습니다. 이렇게 하면 프로토콜의 접근 범위를 제한할 수 있죠.

프로토콜 정의 내의 각 요구사항의 접근 수준은 자동으로 프로토콜과 동일한 접근 수준으로 설정됩니다. 프로토콜 요구사항을 프로토콜이 지원하는 접근 수준과 다르게 설정할 수는 없어요. 이는 프로토콜을 채택하는 모든 타입에서 프로토콜의 모든 요구사항이 표시되도록 보장합니다.

예를 들어, 다음과 같이 internal 접근 수준을 가진 프로토콜을 정의할 수 있습니다:

internal protocol SomeProtocol {
    // 프로토콜 요구사항들
    func someMethod()
    var someProperty: Int { get set }
}
swift

프로토콜 상속

새 프로토콜을 정의할 때 기존 프로토콜에서 상속받는 경우, 새 프로토콜은 상속받는 프로토콜과 최대 동일한 접근 수준을 가질 수 있습니다. 예를 들어, internal 프로토콜에서 상속받는 public 프로토콜은 작성할 수 없어요.

다음은 public 프로토콜에서 상속받는 internal 프로토콜의 예시입니다:

public protocol PublicProtocol {
    func publicMethod()
}
 
internal protocol InternalProtocol: PublicProtocol {
    func internalMethod()
}
swift

프로토콜 준수

타입은 타입 자체보다 낮은 접근 수준의 프로토콜을 준수할 수 있습니다. 예를 들어, 다른 모듈에서 사용할 수 있는 public 타입을 정의하고, 해당 타입이 internal 프로토콜을 준수하도록 할 수 있어요. 이 경우 internal 프로토콜을 정의하는 모듈 내에서만 해당 타입의 프로토콜 준수를 사용할 수 있습니다.

타입이 특정 프로토콜을 준수하는 컨텍스트는 타입의 접근 수준과 프로토콜의 접근 수준 중 최소값입니다. 예를 들어, 타입이 public이지만 준수하는 프로토콜이 internal인 경우, 해당 프로토콜에 대한 타입의 준수 또한 internal이 됩니다.

타입이 프로토콜을 준수하도록 작성하거나 확장할 때는 각 프로토콜 요구사항에 대한 타입의 구현이 해당 프로토콜에 대한 타입 준수의 접근 수준 이상이어야 합니다. 예를 들어, public 타입이 internal 프로토콜을 준수하는 경우, 각 프로토콜 요구사항에 대한 타입의 구현은 최소한 internal 이상이어야 해요.

다음은 public 타입이 internal 프로토콜을 준수하는 예시입니다:

internal protocol InternalProtocol {
    func internalMethod()
}
 
public struct PublicType: InternalProtocol {
    // internalMethod()의 구현은 internal 이상이어야 함
    internal func internalMethod() {
        // 구현 내용
    }
}
swift

이렇게 프로토콜의 접근 제어를 이해하면, 프로토콜과 타입 간의 상호작용을 더욱 효과적으로 관리할 수 있게 됩니다. 프로토콜의 접근 수준을 적절히 설정하고, 타입이 프로토콜을 준수할 때 접근 수준 규칙을 따르는 것이 중요하죠. 이를 통해 코드의 캡슐화와 모듈화를 향상시킬 수 있습니다.