Swift에서는 다양한 방법으로 클래스의 타입을 확인할 수 있습니다. 이러한 클래스 타입 확인은 개발 중에 특정 객체의 타입을 알아내는 데 유용하며, 유효성 검사나 조건문 등에서 활용될 수 있습니다.
1. 타입 확인 연산자 (Type Check Operator)
Swift에서는 is
연산자를 사용하여 객체의 타입을 확인할 수 있습니다. is
연산자는 왼쪽 객체가 오른쪽 타입과 일치하는지 여부를 판단합니다.
class Person {
var name: String
init(name: String) {
self.name = name
}
}
class Student: Person {
var school: String
init(name: String, school: String) {
self.school = school
super.init(name: name)
}
}
let john = Person(name: "John")
let jane = Student(name: "Jane", school: "ABC School")
print(john is Person) // true
print(john is Student) // false
print(jane is Person) // true
print(jane is Student) // true
위의 예제에서 john
객체의 타입은 Person
이므로 john is Person
은 true
를 반환합니다. 반면에 john is Student
는 false
를 반환합니다.
jane
객체의 경우 Person
클래스를 상속받았기 때문에 Person
의 타입에도 해당되지만, Student
클래스의 타입에도 해당되므로 jane is Person
와 jane is Student
모두 true
를 반환합니다.
2. 다운캐스팅 (Downcasting)
다운캐스팅은 슈퍼클래스 타입의 객체를 서브클래스 타입으로 변환하는 작업입니다. 다운캐스팅은 as?
또는 as!
연산자를 사용하여 수행할 수 있습니다.
as?
연산자: 다운캐스팅에 실패하면nil
을 반환합니다.as!
연산자: 다운캐스팅에 실패하면 런타임 에러가 발생합니다.
let persons: [Person] = [Person(name: "Alice"), Student(name: "Bob", school: "XYZ School")]
for person in persons {
if let student = person as? Student {
print("\(person.name) is a student of \(student.school)")
} else {
print("\(person.name) is not a student")
}
}
위의 예제에서 persons
배열은 Person
타입의 객체와 Student
타입의 객체를 포함하고 있습니다. for-in
루프를 통해 배열의 요소들을 탐색하면서, 각각의 객체를 as?
연산자를 사용하여 Student
로 다운캐스팅할 수 있습니다. 다운캐스팅에 성공한 경우에는 해당 학생의 이름과 학교를 출력하고, 실패한 경우에는 그냥 “is not a student”라는 메시지를 출력합니다.
3. 타입 체크 및 다운캐스팅 동시에 수행하기
as?
와 as!
연산자를 사용하여 클래스의 타입을 체크하고 동시에 다운캐스팅을 수행할 수도 있습니다.
let persons: [Person] = [Person(name: "Alice"), Student(name: "Bob", school: "XYZ School")]
for person in persons {
if let student = person as? Student {
print("\(person.name) is a student of \(student.school)")
} else if let nonStudent = person as? Person {
print("\(person.name) is not a student")
}
}
위의 예제는 Student
타입과 Person
타입을 체크하고 동시에 다운캐스팅하는 방법을 보여줍니다. person
객체를 as?
연산자를 통해 Student
로 다운캐스팅하려고 시도합니다. 다운캐스팅에 성공한 경우에는 해당 학생의 이름과 학교를 출력하고, 실패한 경우에는 nonStudent
상수를 활용하여 그냥 “is not a student”라는 메시지를 출력합니다.
마무리
Swift에서 클래스의 타입을 확인하는 방법에 대해 알아보았습니다. is
연산자와 as?
, as!
연산자는 클래스 타입 확인과 다운캐스팅을 위한 강력한 도구로, 객체의 타입을 정확하게 파악하고 처리할 수 있게 도와줍니다. 프로젝트에서 필요에 따라 적절한 방법을 선택하여 활용해보세요.