🔥 프로토콜의 접근 제어

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 영상

채널 보기
함수 객체의 보편적 구성 | 프로그래머를 위한 카테고리 이론
Pro펑터, 입력과 출력을 동시에 다루는 펑터 | 프로그래머를 위한 카테고리 이론
인터셉터와 RxJS로 캐시 시스템 구축하기 | NestJS 가이드
관점 지향 로깅 인터셉터 구현 및 전역 바인딩 전략 | NestJS 가이드
NestJS 인터셉터에서 map 연산자로 응답을 변환하는 방법 | NestJS 가이드
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
NestJS 커스텀 데코레이터, createParamDecorator 사용 | NestJS 가이드
입력을 전처리하는 Functor - Contravariant와 contramap 이해하기 | 프로그래머를 위한 카테고리 이론