Type casting, Type Check

Lena·2021년 10월 2일
0

Swift

목록 보기
2/8
post-thumbnail

형변환 Type Casting


as → upcasting : 안전한 캐스팅

  • 상속 관계가 있는 클래스끼리만 타입 캐스팅이 가능함
  • 자식 (부모로부터 상속받아 더 많은 것으르 가지고 있음) 인스턴스를 부모로 캐스팅하는 것은 문제가 없음 ↔ downcasting은 안될 수도 있다
  • as 연산자를 이용한 타입 변환 (type casting)
    • 자식인스턴스 as 부모클래스 // upcasting 안전한 캐스팅. 자식이 추상화됨
    • 업캐스팅 → 객체를 부모 클래스의 객체로 형 변환한다
    • 문제가 없으므로 보장된 변환 (guaranteed conversion)
    • UIBotton 은 UIControl의 자식 클래스이므로 안전하게 형 변환함
    • let myButton: UIButton = UIButton()
    • let myControl = myButton as UIControl // 자식 인스턴스 as 부모 클래스
    • 자식 인스턴스인 myButton을 부모 클래스형으로 형 변환

as! as? → downcasting

  • 다운캐스팅

    • 부모 인스턴스를 자식 클래스로 변환하는데 사용
    • as! : 성공 확신이 있을 때 강제 변환 (dorced conversion) → 변환이 안되면 crash
    • as? : 성공 확신이 없을 때 안전하게 변환 → 변환이 안되면 nil 리턴하므로 옵셔널 타입으로 반환한다.
  • 부모인스턴스 as! 자식클래스 → 많이 쓰지는 않음

    • downcasting 일반 타입으로 반환
    • 다운캐스팅이 반드시 성공할 것이라는 확신이 있을 때
  • 부모인스턴스 as? 자식클래스

    • 형이 바뀌는 순간 원래 자식클래스의 형이 나오는 것이 아니고 옵셔널 타입으로 반환 → binding 하거나 forced unwrapping 해줘야 한다
    • 확신이 없을 경우

타입 검사 (Type Check)


is

  • is 키워드 이용해 값의 타입 검사를 할 수 있다 (type check)
    • 지정된 객체가 MyClass라는 이름의 클래스의 인스턴스인지 검사
    • 인스턴스 is 클래스 → 인스턴스가 해당 클래스인가?
      if myobject is Myclass{
      	// myobject는 MyClass의 인스턴스이다
      }
    • true/false 형태로 반환
class A {}
var a : A = A()
if a is A{
	print("Yes")
}

학습자료 : Smile Han 유튜브 채널

0개의 댓글