티스토리 뷰
객체지향 프로그래밍을 하다보면 상속 관계에 있는 여러 클래스의 인스턴스를 만들고 그 인스턴스들을 관리하는 방법이 필요하다. 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
링크
TAG
- 운영체제
- SOCKET
- C/C++
- 국내여행
- machine learing
- game
- DesignPattern
- Git
- 드라마
- swift
- OS
- rxswift
- 자료구조
- ios
- SwiftUI
- mongoDB
- Spring
- winsock
- 알고리즘
- C++
- SHADER
- C
- 수학
- JSP
- scala
- Java
- 데이터베이스
- database
- Cocos2d-x
- ue4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함