티스토리 뷰
객체지향 프로그래밍을 하다보면 상속 관계에 있는 여러 클래스의 인스턴스를 만들고 그 인스턴스들을 관리하는 방법이 필요하다. type별로 일일히 관리하면 코드가 너무 비효율적이니까 효율적으로 관리하기 위해서는 일단 해당 인스턴스의 정확한 type을 알아야하고, 가능한 가장 추상적인 type으로 관리할 수 있어야 한다.
보통 super class type으로 모든 인스턴스를 관리하고 특정 sub class의 연산을 수행하려면 sub class type으로 캐스팅해서 접근하도록 구현하는데 swift 에서 이걸 어떻게 구현할 수 있는지 알아보자.
is
is라니.
swift는 가독성을 향상시키기 위해서 노력한 흔적들이 굉장히 많이 보인다. 그래서 문법을 말로 설명하는 것 보다 코드를 한번 보는 게 오히려 더 이해가 잘 될 때가 있다.
var some = 0
if a is Int {
print("is int")
} else if a is Double {
print("is double")
} else if a is String {
print(a)
}
== 연산자는 안에 있는 값을 비교하지만 is는 type을 비교한다고 할 수 있겠다.
as
is를 보고 as를 보면 이름만 봐도 어떤 일을 하는 키워드인지 감이 온다. 피연산자를 as? 뒤에 오는 자료형으로 캐스팅한다는 뜻이다. ?을 주로 붙여서 사용하는데 이유는 이 캐스팅이 실패할 수도 있기 때문이다. as는 캐스팅에 실패하면 nil을 반환한다.
class Espresso {
var shot = 1
func sayMyName() { print("I'm espresso") }
}
class Latte: Espresso {
var milk = 1
var whipping = false
func sayMyName() { print("I'm latte") }
}
class Americano: Espresso {
var water = 1
func sayMyName() { print("I'm americano") }
}
var orders = [Espresso(), Latte(), Americano()]
for order in orders {
if let drink = order as? Latte {
drink.sayMyName()
} else if let drink = order as? Americano {
drink.sayMyName()
} else if let drink = order as? Espresso {
drink.sayMyName()
}
}
// I'm espresso
// I'm latte
// I'm americano
위 코드에서는 실패할 일이 없긴 하지만 Int나 다른 type으로만 검사했다면 for문을 돌다가 캐스팅에 실패할 것이고 if문에 의해 무시되고 아무것도 출력되지 않을 것이다.
'Programming > Swift' 카테고리의 다른 글
Swift Expert | Codable (0) | 2020.12.02 |
---|---|
Swift Beginner | 인터페이스 (0) | 2020.11.18 |
Swift Beginner | 함수의 시작과 끝 guard defer (0) | 2020.11.18 |
Swift Beginner | Closure (0) | 2020.11.18 |
Swift Beginner | 함수(2) (0) | 2020.11.18 |
- Total
- Today
- Yesterday
- SOCKET
- C
- 국내여행
- Spring
- machine learing
- scala
- game
- winsock
- mongoDB
- SwiftUI
- rxswift
- Git
- C++
- ue4
- 드라마
- 알고리즘
- JSP
- Cocos2d-x
- OS
- 자료구조
- Java
- database
- SHADER
- swift
- C/C++
- 운영체제
- 수학
- 데이터베이스
- ios
- DesignPattern
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |