본문 바로가기

opaque

(3)
Opaque And Boxe Type - 이해용 샘플 코드 protocol Serenable { // Generic은 타입을 지정을 해줘야 사용할 수 있음 associatedtype Element func runRowan() } func whatRetrunType(_ serena: T) -> T { return serena } func whatRetrunType(serenable serena: T) -> any Serenable { // 현재 타입을 모르기때문에 any return serena } func whatReturnType(opaque serena: T) -> some Serenable { return serena } struct Rowan: Serenable { typealias Element = Int func runRowan() { print("로..
Opaque And Boxe Type (2) Boxed Protocol Types there exists a type T such that T conforms to the protocol → Boxed Protocol Types은 **existential Type(존재 타입)**이라고도 불리며, 프로토콜 이름 앞에 any를 붙임 ✏️ 예시 protocol Shape { func draw() -> String } struct VerticalShapes: Shape { // Boxed Protocol Type인 `Shape` 요소의 배열 타입 var shapes: [any Shape] func draw() -> String { return shapes.map { $0.draw() }.joined(separator: "\\n\\n") } } let la..
Opaque And Boxe Type (1) Opaque & Boxed Type의 역할 값의 타입에 대한 자세한 정보를 숨김 → 반환값의 기본 타입이 비공개로 유지될 수 있기 때문에 모듈과 이를 호출하는 코드 사이에 타입 정보를 숨길 수 있음 값의 타입을 숨길 수 있는 방법 Opaque Type - 불투명한 타입 → 타입 식별을 유지하기 때문에 컴파일러는 해당 타입의 정보에 접근할 수 있지만, 모듈의 클라이언트(이를 사용하는 곳)에서는 접근할 수 없음 → 반환하는 함수는 반환값의 타입을 숨기는 대신, 이를 지원하는 Protocol에서 반환값을 설명함 Boxed Protocol Type - 박스형 타입 → 타입 식별을 유지하지 않기 때문에, 값의 타입을 런타임까진 알 수 없으며 다른 값이 저장됨에 따라 변경될 수 있음 → 프로토콜을 준수하는 타입의 ..

728x90