[swift] 불투명 타입

이은수, Lee EunSoo·2024년 10월 9일
0

Swift Basic

목록 보기
22/24
post-thumbnail

개요

요즘 웹소설 주인공들이 힘을숨긴다는데 스위프트는 타입을 숨긴다

스위프트에서 반환타입등을 숨기고 싶을때 특정 프로토콜만은 준수한다는 의미를 나타낼때 불투명타입을 사용한다.

some키워드를 이용한다.

설명

불투명한 타입 반환

앞서 설명했던 것처럼 반환타입을 숨기고 싶은때 사용한다.

someFunction() -> some SomeProtocol{ 
	//(대충 함수를 구현하는 내용)
    return someInstance: SomeProtocol
}

반환타입을 명시하는 곳에 some키워드를 사용해서 나타낸다.

위 코드를 예를들어 설명하면 someFunction은 SomeProtocol을 준수하기만 하면 어떤 존재라고 반환 가능함을 명시하고 있다.

존재 타입

some을 이용하지 않고도 불투명한 타입을 받아들이는 형태로 코드를 작성할 수 있는데 이를 박스형 프로토콜타입 혹은 존재타입이라고 한다.

일단 예시 코드를 보자

protocol Drawable {
    func draw()
}

struct Circle: Drawable {
    func draw() {
        print("Drawing a circle")
    }
}

struct Square: Drawable {
    func draw() {
        print("Drawing a square")
    }
}

let shapes: [any Drawable] = [Circle(), Square()]

for shape in shapes {
    shape.draw()
}

이처럼 데이터의 타입을 any를 사용해서 특정 프로토콜을 준수하기만 하면 입력받는 형태를 말한다.

위 코드에선 [any Drawable]타입의 배열을 선언해서 Drawable을 준수하는 모든 인스턴스를 받아 들일수 있도록 작성하였다.

이러한 형태를 통해서 데이터의 입력을 불투명하게 설계 할 수 있다.

정리

  • some은 반환타입을 불투명하게 할 수 있다.
    • some뒤에오는 타입을 준수하는 모든 데이터를 반환 할 수 있음을 의미한다.
  • 존재타입은 불투명한 데이터 입력을 지원한다.
    • any 키워드를 사용해서 특정 타입은 준수하는 존재를 받아들일 수 있도록 작성하는것을 말한다.
profile
iOS 개발자 취준생, 천 리 길도 한 걸음부터

0개의 댓글