타입 캐스팅 (Type Casting)

hoBahk·2021년 10월 20일
0

오늘은 타입캐스팅에 대해서 알아보겠습니다.

Type Casting

타입캐스팅은 인스턴스의 타입을 확인하거나 인스턴스의 타입을 슈퍼클래스 또는 서브클래스 타입처럼 다루기 위해 사용합니다.
캐스팅은 실제 인스턴스 값을 바꾸는 것이 아니라 지정한 타입으로 취급하는 것입니다.

Checking Type

is 를 써서 타입을 확인할 수 있습니다.
아래 코드를 보면 is를 사용하여 항목들의 타입을 확인한 후 count를 올립니다.


let library = [
    Movie(name: "Casablanca", director: "Michael Curtiz"),
    Song(name: "Blue Suede Shoes", artist: "Elvis Presley"),
    Movie(name: "Citizen Kane", director: "Orson Welles"),
    Song(name: "The One And Only", artist: "Chesney Hawkes"),
    Song(name: "Never Gonna Give You Up", artist: "Rick Astley")
]
// the type of "library" is inferred to be [MediaItem]


var movieCount = 0
var songCount = 0

for item in library {
    if item is Movie {
        movieCount += 1
    } else if item is Song {
        songCount += 1
    }
}

print("Media library contains \(movieCount) movies and \(songCount) songs")
// "Media library contains 2 movies and 3 songs" 출력

Downcasting

as? 와 as!를 사용하여 인스턴스 타입을 확인할 수 있습니다. as?는 어떤 타입의 인스턴스인지 확실하지 않을 때 사용하고, as!는 확실할 때 사용합니다. 하지만 as!로 다운캐스팅을 했을 때 지정한 타입이 아니라면 런타임 에러가 납니다.

아래와 같이 사용합니다.

for item in library {
    if let movie = item as? Movie {
        print("Movie: \(movie.name), dir. \(movie.director)")
    } else if let song = item as? Song {
        print("Song: \(song.name), by \(song.artist)")
    }
}

// Movie: Casablanca, dir. Michael Curtiz
// Song: Blue Suede Shoes, by Elvis Presley
// Movie: Citizen Kane, dir. Orson Welles
// Song: The One And Only, by Chesney Hawkes
// Song: Never Gonna Give You Up, by Rick Astley

Swift - TypeCasting 공식문서

profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글