형변환
1. as는 Upcasting
상속 관계가 있는 클래스들끼리만 타입 캐스팅이 가능하다.
자식을 부모로 캐스팅하는 것은 문제가 없음.
as 연산자를 이용한 타입 변환(type casting)
- 자식 인스턴스 as 부모 클래스 (upcasting 안전한 캐스팅, 자식이 추상화됨)
- 업캐스팅은 객체를 부모 클래스의 객체로 형 변환
- 형 변환은 성공할 것이기 때문에 보장된 변환이다(guaranteed conversion)
- UIBUtton은 UIControl의 자식 클래스이므로 안전하게 형 변환
- let myButton: UIButton = UIButton()
- let myControl = myButton as UIControl (자식 인스턴스 as 부모 클래스)
- 자식 인스턴스인 myButton을 부모 클래스형으로 형 변환
자식은 부모로부터 상속 받아서 더 많은 것을 가지고 있습니다. 그래서 자식을 조금 잘라내고 추상화하면 부모를 얼마든지 만들 수 있거든요.
2. as! as?는 Downcasting
문제가 있는 것은 이 다운캐스팅이다. 부모를 자식으로 만드는 게 다운캐스팅인데요. 부모보다 자식이 더 큰데 이걸 다운캐스팅 하면 여기에 없는 게 있을 수도 있기 때문에 문제가 있을 수 있다.
다운 캐스팅 방법에는 as?와 as! 두가지가 있음. 둘 다 많이 쓰는데 as?가 더 좋음.
스위프트에서 느낌표는 확실하다 이런 느낌이고 물음표는 애매한 느낌.
as!부터 보자. 사용하는 법은
부모 인스턴스 as! 자식 클래스
이렇게 하면 부모 인스턴스를 자식 클래스로 확 바꿔버림. 성공이 안 되면 앱이 크래쉬가 나기 때문에
다운 캐스팅이 반드시 성공할 것이라는 확신이 있을 때 as!를 이용해서 부모인스턴스를 자식 클래스로 만들면 된다.
근데 부모가 자식으로 바뀔지 모르겠어 하면 as?로 하면 된다. 얘는 변환이 안 되면 nil을 리턴하고
자식 클래스로 변환이 되어도 옵셔널 타입으로 나오게 된다는 점이 있다.
바인딩 해야해서 귀찮지만 안정적으로 as?를 이용하자
타입 검사 is
is 키워드는 타입을 검사할 때 사용한다.
사용하는 법은 인스턴스 is 클래스 이렇게 앞에는 인스턴스 뒤에는 클래스를 써주면 된다.
아래는 예제.
if myObject is MyClass {
//
}
인스턴스가 해당 클래스인지 검사하는 것으로 true/ false가 나오겠죵.
'Swift' 카테고리의 다른 글
Any, AnyObject (0) | 2025.03.08 |
---|---|
옵셔널 (2) (0) | 2025.03.07 |
옵셔널 (1) (0) | 2025.03.06 |
[03] 1주차: 버튼과 텍스트를 사용하여 UI 실습 (1) | 2025.03.05 |
[02] 1주차: 간단한 화면 구성 (0) | 2025.03.05 |