스위프트의 불명확 타입

개요


SwiftUI를 공부하던 중 가장 기본 템플릿을 보면 body 변수의 타입에 Some이 붙어있는 것을 보고 궁금증이 들었다.

스위프트에서는 그것을 불명확 타입이라고 부른다.

불명확 타입에 대해 알아보고 언제 사용하는 것인지 알아보겠다.




불명확 타입


Opaque Types라고 부르며 이것을 사용하면 반환할 타입의 정확한 타입을 알려주지 않은채로 반환하겠다는 의미이다.

언뜻보면 제네릭과 비슷하다고 생각하지만 제네릭은 어떤 타입이 나에게 들어올지 모르는 것이다.

즉 외부에서 타입을 지정해주는 것이고 불명확 타입은 내부에서 타입을 정해서 내보내기 때문에 역제네릭 타입이라고도 표현한다.




view 프로토콜


SwiftUI에서 자세히 알아보겠다.

애플 공식문서 설명




some


반환 타입 위치에 프로토콜을 쓰면서 앞에 some을 붙이면 이 프로토콜을 준수하는 어떤 타입 중에 하나이다라고 알려주는 것이다.

1
2
3
4
5
6
7
8
9
var body: some View {
  Text("Hello World")
    .padding()
}

var body: Text {
  Text("Hello World")
    .padding() // Error
}

위의 예시를 보면 some을 써줌으로써 view 프로토콜을 준수하는 타입 중 하나를 모두 사용할 수 있다.

Text라고 타입을 정해버리면 padding modifier는 사용할 수가 없다. 오직 Text만 사용할 수 있는 프로퍼티가 되버린다.

Image 구조체가 됐든 Text 구조체가 됐든 Button 구조체가 됐든 View 프로토콜을 지키면 모두 사용가능하다.

스탠포드 강의에서는 some을 사용하는 이유는 2가지라고 소개했는데

첫번째는 View처럼 행동하기 위해서, 두번째는 다른 타입들을 조합하면서 복잡하게 사용하기 위해서라고 했다.