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 |
댓글