🔥 프로토콜의 접근 제어

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

채널 보기
커스텀 예외 필터 만들기 | NestJS 가이드
class-validator 와 DTO | NestJS 가이드
NestJS 커스텀 예외 만들기 - 에러 처리 깔끔하게 하는 법 | NestJS 가이드
NestJS 필터 바인딩 - Method, Controller, Global Scope 비교 | NestJS 가이드
Writer 펑터와 클라이슬리 카테고리 | 프로그래머를 위한 카테고리 이론
클로드 섀넌이 들려주는 정보 이론 이야기
NestJS 파이프가 뭔가요? 컨트롤러를 보호하는 방법 | NestJS 가이드
펑터 합성 | 프로그래머를 위한 카테고리 이론