大器晩成

타입캐스팅 (as, type cast operator) 본문

iOS/Swift 문법

타입캐스팅 (as, type cast operator)

zerobugpark 2024. 12. 19. 13:30

 

타입 캐스팅은 캐스팅 전 타입과 캐스팅 후 타입의 상위/하위 관계에 따라 업 캐스팅과 다운 캐스팅으로 나누어진다.

업캐스팅(Up Casting) 다운 캐스팅(Down Casting)
  • 하위 클래스 타입을 상위 클래스 타입으로 변환할 때
  • 캐스팅하기 전 타입이 하위 클래스, 캐스팅한 후 타입이 상위 클래스일 때
  • 캐스팅한 결과, 캐스팅하기 전 타입보다 추상화될 때
  • 일반적으로 캐스팅 과정에서 오류가 발생할 가능성이 없습니다 -> 항상 성공
  • 업캐스팅은 하위클래스 타입을 상위 클래스 타입으로 캐스팅하는 것을 말한다. 캐스팅한 결과는 캐스팅하기 전보다 상위 클래스 타입으로 변환되며, 이를 가리켜 추상화되었다고 표현합니다..
  • 상위 클래스 타입을 하위 클래스 타입으로 캐스팅할 때
  • 캐스팅하기 전 타입이 상위 클래스, 캐스팅한 후 타입이 하위 클래스
  • 캐스팅한 결과, 캐스팅하기 전 타입보다 구체화될 때
  • 캐스팅 과정에서 오류가 발생할 가능성이 있습니다.
  • 오류에 대한 처리 방식에 따라 옵셔널 캐스팅과 강제 캐스팅으로 나누어집니다.
  • 다운 캐스팅은 상위 클래스 타입의 객체를 하위 클래스 타입으로 캐스팅하는 것이며, 부모 클래스 타입을 자식 클래스 타입으로 변환하는 것이므로 오류가 발생할 가능성을 잠재적으로 가지고 있습니다.
  • 다운 캐스팅 과정에서 오류가 발생하면 nil이 반환된다. 이 같은 결과값을 고려하여 다운 캐스팅은 옵셔널 타입으로 반환하는 옵셔널 캐스팅과 반드시 성공한다는 전제하에 일반 타입으로 반환하는 강제 캐스팅으로 나누어집니다.
업 캐스팅
// 객체 as 변환할 타입

다운 캐스팅
// 객체 as? 변환할 타입(결과는 옵셔널 타입)
// 객체 as! 변환할 타입(결과는 일반 타입)
  • 타입 캐스팅을 위한 연산자는 as입니다. 캐스팅할 객체 뒤에 연산자를 붙이고, 이어서 변환할 대상 타입을 작성합니다.
class Person {
    var name = ""
    var age = 10
}

class Student: Person {
    var id = 1
    
}

class Undergraduate: Student {
    var major = "전자공학"
}

let person: Person = Undergraduate()
[Undergraduate]
//- name
//- age
//- id
//- major


if let test =  person as? Undergraduate {
    print(test.id)
} else {
    print("error")
}

let person1: Person = Person()
let p = person1 as? Undergraduate
print(p) // nil
  • let person: Person = Undergraduate() -> 메모리공간에는 Undergraduate의 프로퍼티가 다 저장되어 있지만, 실제 보이는 것은 Person 타입만큼만 보여 name, age 프로퍼티만 접근할 수 있습니다.

Bridging(브릿징) -> 서로 호환되는 형식을 캐스팅에서 쉽게 사용하는 것

let str = "TEST"
let otherStr = str as NSString

 

728x90

'iOS > Swift 문법' 카테고리의 다른 글

Any, AnyObject  (0) 2024.12.19
타입과 다형성  (0) 2024.12.19
타입캐스팅(Type Casting)  (0) 2024.12.19
구조체/클래스의 생성자/소멸자 비교  (0) 2024.12.06
초기화 해제 (소멸자, Deinitializer)  (0) 2024.12.06