Opaque Type

JG Ahn·2025년 2월 9일

swift 심화

목록 보기
18/18
post-thumbnail

Opaque Type

  • 코드 사용자는 프로토콜 타입에서 제공하는 인터페이스만 사용 가능(Boxed Protocol Type과 동일)

  • but, 컴파일 타임에 컴파일러가 실제 타입을 알고 있다. → 코드 최적화 가능(예: 인라이닝)

  • 프로토콜 타입 앞에 some을 붙여 사용

Opaque Type VS Boxed Protocol Type

  • Boxed Protocol Type : 메서드 구현 내부에서 다양한 타입 반환 가능

  • Opaque Type : 메서드 구현 내부에서 단 하나의 타입만 반환 가능 →컴파일러가 타입 추론 가능

    예시)

    위 코드에 2개의 getAnimal 메서드가 있다.

    Boxed Protocol Type은 반환 타입이 any Animal.
    Opaque Type은 반환 타입이 some Animal.

    코드적인 차이점을 보면, Boxed Protocol Type은 구현부에서 Dog() 또는 Cat()과 같이 여러 타입을 리턴할 수 있다. Opaque Type은 Cat() 한가지 타입만 반환하고 있다.

    Opaque Type에서 여러 타입을 반환하려고 하면 오류가 발생한다.


인라이닝

  • 함수 호출 코드를 함수 구현코드로 대체 → 함수 호출 비용을 제거

cat.climb()가 인라이닝으로 메서드 구현부로 치환됨

컴파일러의 코드 최적화

  • 컴파일러가 타입 추론이 불가능한 경우


    animal.makeSound()는 인라이닝이 불가능하다. 커파일러가 Cat의 makeSound()로 대체해야 할지 Dog의 makeSound()로 대체해야 할지 모름.

0개의 댓글