본문 바로가기
Swift

[Swift] 타입캐스팅 (Type casting)

by Sky Titan 2020. 12. 28.
728x90
스위프트 프로그래밍
국내도서
저자 : 야곰
출판 : 한빛미디어 2019.10.01
상세보기

타입캐스팅 (Type casting)

  • 스위프트는 다른 타입끼리의 값 교환을 엄격히 제한한다.
  • 암시적 데이터 타입 변환 지원 x

 

생성자를 통해 새로운 인스턴스 생성

  • Int(실수형) 처럼 생성자를 통해 다른 타입의 인스턴스를 새로 생성할 수 있다.
  • 타입 캐스팅, 타입 변환과는 다른 개념이다.
import Foundation

var number_integer : Int = 5

var number_double : Double = Double(number_integer)

print(number_double)

/* 결과
5.0
*/

 

스위프트의 타입 캐스팅

  • 인스턴스의 타입을 확인 or 자신을 다른 타입의 인스턴스인양 행세할 수 있는 방법으로 사용 가능
  • is, as 연산자 사용

 

1. is 연산자

  • 인스턴스의 타입을 확인할 수 있다.
  • '인스턴스 is 타입 클래스' 형태로 사용해서 해당 클래스의 인스턴스 혹은 해당 클래스의 자식 클래스의 인스턴스라면 true 반환
  • '메타 타입' 타입을 이용해서도 타입을 확인할 수 있다.
  • type(of:) 메서드를 통해서 타입 확인 가능
import Foundation


var number_integer : Int = 5

print(number_integer is Int)

print(type(of: number_integer))
/* 결과 : 
true
Int
*/

 

2. as 연산자

  • 다운캐스팅 : 부모클래스의 타입을 자식클래스로 캐스팅하는 것
    • 항상 실패의 여지가 따르기에 as?, as! 두가지 타입캐스팅 연산자가 존재한다.
    • 다운캐스팅은 항상 가능한 것이 아닌 업캐스팅한 것을 다시 다운캐스팅하는 경우에 사용하는 것
  • as? : 다운캐스팅에 실패한 경우 nil을 반환한다.
    • 조건부 연산자
    • 반환타입 : 옵셔널 o
  • as! : 다운캐스팅에 실패할 경우 런타임 오류 발생
    • 다운캐스팅을 강제한다.
    • 반환타입 : 옵셔널 x
  • 컴파일러가 항상 다운캐스팅을 확신할 수 있는 경우라면 as를 사용할 수 있다.
    1. 같은 타입으로 캐스팅하는 경우
    2. 부모클래스 타입으로 캐스팅하는 경우
import Foundation

class Job {

    var name : String

    init(name : String) {
        self.name = name
    }
    
}

class Programmer : Job {
   
}

var p1 = Programmer(name: "p1")

guard let j1 = p1 as? Job else {
    fatalError()
}

print("업캐스팅 : "+j1.name)

guard let p2 = j1 as? Programmer else {
    fatalError()
}

print("다운캐스팅 : "+p2.name)

/* 결과 : 
p1
p1
*/
728x90

'Swift' 카테고리의 다른 글

[Swift] 구조체와 클래스  (0) 2020.12.28
[Swift] 범위 연산자  (0) 2020.12.28
[Swift] 메서드 (Method)  (0) 2020.12.26
[Swift] 프로퍼티 (Property)  (0) 2020.12.26
[Swift] Extension  (0) 2020.12.26

댓글