본문으로 건너뛰기

프로토콜과 형 변환

형 변환은 인스턴스의 타입을 확인하거나 인스턴스를 명시된 타입으로 다루기 위한 방법이다. 스위프트에서는 특정 타입의 인스턴스인지 확인하기 위해 is 키워드를 사용하며, 인스턴스를 특정 타입으로 다루기 위해 as 키워드를 사용한다.

if person is SwiftProgrammer {
print("\(person.firstName) is a Swift Programmer")
}

위 예에서 person 인스턴스가 SwiftProgrammer 타입일 경우 조건문은 true 를 반환하며, 그렇지 않다면 false를 반환한다. 특정 타입의 인스턴스만 반환하게 배열을 필터링하기 위해 where 문을 is 키워드와 함께 조합할 수도 있다.

for person in people where person is SwiftProgrammer {
print("\(person.firstName) is a Swift Programmer")
}

인스턴스를 구체적인 타입으로 형 변환하기 위해 as 키워드를 사용할 수 있다. 인스턴스가 명시된 타입이 아닌 경우에는 형 변환이 실패할 수 있기 때문에 as 키워드는 as?as! 이렇게 두 가지 형식으로 이루어져 있다. as? 형식은 형 변환에 실패 시 nil 을 반환한다. as! 형식은 형 변환에 실패하면 런타임 에러가 발생한다. 그러므로 인스턴스 타입을 확신하거나 형 변환을 수행하기 전에 인스턴스 타입을 검사하지 않는 경우를 제외하고 as? 형식을 사용할 것을 권장한다.

if let _ = person as? SwiftProgrammer { // option binding
print("\(person.firstName) is a Swift Programmer")
}

as? 키워드는 옵셔널optional을 반환하므로, 형 변환을 수행하기 위해 옵셔널 바인딩을 사용할 수 있다.