🔥 프로토콜의 접근 제어

335자
5분

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

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

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

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

프로토콜 상속

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

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

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

프로토콜 준수

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

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

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

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

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

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

YouTube 영상

채널 보기
Trie 자료구조 완전 정복 - 개념부터 시각화까지 | Trie 자료구조 이야기
내적의 기하학적 의미와 코사인 유사도 원리 | 선형대수학
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
우리가 매일 쓰는 맞춤법 검사기와 라우터 속에 숨겨진 알고리즘은? | Trie 자료구조 이야기
벡터의 정의와 덧셈 연산 | 선형대수학
Trie 자료구조 완전 정복 - 개념부터 시각화까지 | Trie 자료구조 이야기
7편, 파이썬으로 구현하는 B-Tree