🍎 Apple/Swift
[Swift] Opaque Type: Some을 붙여 타입캐스팅할 필요없이 구체 타입으로 사용하자.
PushedGun
2023. 10. 24. 00:10
1. 타입 캐스팅해서 쓰는 게 맞나...?
protocol Shape {
var color: Color { get, set }
}
class Square: Shape {
var color: Color
var text: String
..생략..
}
//
func get() -> Shape { //추상 타입으로 값을 리턴해주기에, shape에 있는 형태밖에 사용하지 못한다.
let square = Square(..생략..)
return square
}
//사용할 때
let a = get()
a.color
a.text//에러!!
위와 같이 이 추상화 protocol로 호출할 경우 해당 protocol의 인터페이스대로 사용할 수밖에 없다.
2. Some 사용하면, 구체 타입을 직접 사용할 수 있다!!
바로 예제를 보자
//위 예제와 같은 class, protocol이라 가정
func get() -> some Shape { //구체 타입으로 값을 리턴해주기에, shape에 없어도 사용할 수 있는 것들이 생긴다!
let square = Square(..생략..)
return square
}
//사용할 때
let a = get()
a.color
a.text//사용가능!!
구체 타입을 쓰기 위한 불필요한 몸부림??을 줄일 수 있다.