🍎 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//사용가능!!

구체 타입을 쓰기 위한 불필요한 몸부림??을 줄일 수 있다.