본문 바로가기
FRONT-END/iOS

Swift 타입캐스팅(Type Casting)

by 랄라J 2023. 7. 31.

is연산자 (type check operator)

  • 타입에 대한 검사를 수행하는 연산자
  • A is B : B는 A의 인스턴스인지 타입 확인하는 것

 

as 연산자

Person() -> Student() -> Undergraduate()

 

as? /  as!(강제) : 다운캐스팅

  • as? /  as!(강제) => 다운캐스팅
  • Undergraduate 인스턴스를 생성하는데, 아래 코드와 같이 상위 클래스 Person으로 타입을 지정해 선언했던 것의 타입을 Undergraduate 타입으로 바꾸는 것을 의미
let person: Person() = Undergraduate()

if let newPerson = person as? Undergraduate {
 //
}

 

as : 업캐스팅

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

 

타입과 다형성(Polymorphism)

class Person {
    var id = 0
    var name = "이름"
    var email = "test@test.com"
    
    func walk() {
    	print("사람이 걷는다.")
    }
}

class Student:Person {
    var studentId = 1
    
    override func walk() {
    	print("학생이 걷는다.")
    }
    
    func study() {
    	print("학생이 공부한다.")
    }
}

var student1:Person = Student() // student1은 Person 타입으로 업캐스팅되어 저장됨
student1.walk() // 학생이 걷는다.
student1.study() // Error 힙의 영역에는 존재하지만 타입이 Person으로 설정되어 접근 불가

 

 다형성 (Polymolphism)

  • 하나의 객체(인스턴스)가 여러가지의 타입으로 표현될 수 있음을 의미
  • 다형성의 구현은 클래스의 상속과 깊은 연관이 있음
  • 위 코드에서처럼 업캐스팅된 타입인 Person 형태의 메서드를 호출하더라도 실제 메모리에 구현된 재정의된 메서드(Student의 메서드 테이블)가 호출되어 실행됨
  • 타입의 저장 형태는 속성과 메서드에 대한 접근 가능 범위를 나타내는 것이고, 다형성은 인스턴스에 메모리의 실제 구현 내용에 대한 것

 

Any 타입

  • 어떤 타입도 담을 수 있는 타입
  • 하지만, 저장된 타입의 메모리 구조를 알 수 없어 항상 타입캐스팅해서 사용해야하는 단점이 있음

 

AnyObject 타입

  • 어떤 클래스의 타입의 인스턴스도 담을 수 있는 타입

 

switch문 + 타입캐스팅 연산자

switch item {
case is Int:	 		// item is Int
	print("정수")
case let num as Double:		// let num = item as? Double
	print("\(num)")
default:
	print("그 외 타입")
}
728x90

'FRONT-END > iOS' 카테고리의 다른 글

Swift 프로토콜(Protocols)  (0) 2023.08.01
Swift 확장(Extensions)  (0) 2023.08.01
클래스의 상속, 초기화, 생성자  (0) 2023.07.31
Swift 간단한 앱을 만들 때 알면 좋은 기초 문법들  (0) 2023.07.26
XCode 단축키 모음  (0) 2023.07.26

댓글