일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- react
- HTML
- 자바스크립트
- javascript
- 자스민
- 이종호
- 스벨트
- 자료구조
- queue
- 개발
- 계명대
- jest
- hokidoki
- 스위프트
- TDD
- 개발자
- data structure
- 힛잇
- 리액트 예제
- 리액트
- 자바스크립트 자료구조
- 계명대 이종호
- Svelte
- SWIFT
- 호키도키
- Hitit
- 비동기
- 호키스
- hokeys
- IOS
Archives
- Today
- Total
Dog foot print
[SWIFT] Type casting 본문
Type casting
타입 캐스팅은 어떤 클래스가 슈퍼 클래스
혹은 자신을 상속 받은 서브 클래스
로 타입으로 간주되는 것을 의미합니다. 이를 한국어로는 형변환
이라고 합니다.
Note : 부모와 자식간의 관계를 가진 클래스 중에서는 타입 캐스팅으로 인하여, 오류가 발생하는 경우가 존재합니다.
Up Casting , Down Casting
타입 캐스팅은 캐스팅 전 타입과 캐스팅 후 타입의 상위/하위 관계에 따라 업 캐스팅
과 다운 캐스팅
으로 나뉩니다. 이를 구분하는 조건은 다음과 같습니다.
Upcasting
- 하위 클래스 타입을 상위 클래스 타입으로 변환할 때
- 캐스팅하기 전 타입이 하위 클래스, 캐스팅한 후 타입이 상위 클래스일 때
- 캐스팅한 결과, 캐스팅 하기 전 타입보다 추상화 될 때(로직이 더 구체적이지 않다.)
- 일반적으로 캐스팅 과정에서 오류가 발생할 가능성이 없음
Downcasting
- 상위 클래스 타입을 하위 클래스 타입으로 캐스팅 할 때
- 캐스팅하기 전 타입이 상위 클래스, 캐스팅한 후 타입이 하위 클래스
- 캐스팅한 결과, 캐스팅하기 전 타입보다 구체화 될 때
- 캐스팅 과정에서 오류가 발생할 가능성이 있음
- 오류에 대한 처리 방식에 따라 옵셔널 캐스팅과 강제 캐스팅으로 나뉘어 짐
업 캐스팅 의 경우 더 추상화 되었기 때문에, 오류가 발생할 가능성이 없는 안전한 캐스팅이다. 그러나, 다운 캐스팅은 슈퍼 클래스에서 서브 클래스로 변환하는 만큼 로직이 더 구체화 되며, 슈퍼 클래스에서 존재하지 않는 메서드나 프로퍼티를 사용할 가능성이 있는 만큼 오류의 가능성은 높다.
다운 캐스팅 과정에서 오류가 발생하면 nil
이 반환 된다. 이 값을 통하여, 옵셔널 캐스팅 혹은 강제 캐스팅을 하여, 로직을 작성하면 된다.
캐스팅을 하기 위하여, 사용하는 문법은 as
입니다.
업캐스팅
//객체 as 변환할 타입
import UIKit
class SuperClass{
func foo(){
print("hello world");
}
}
class SubClass : SuperClass{
func boo(){
print("boo");
}
}
let subOBJ = SubClass();
let superOBJ : SuperClass = subOBJ as SuperClass;
superOBJ.foo()
다운 캐스팅
객체 as? 변환할 타입 //옵셔널 캐스팅
객체 as! 변환할 타입 //포스드 캐스팅
import UIKit
class SuperClass{
func foo(){
print("hello")
}
}
class SubClass : SuperClass{
override func foo(){
print("world")
}
}
let superOBJ : SuperClass = SubClass();
let subOBJ : SubClass? = superOBJ as? SubClass;
다운 캐스팅을 할때는 실제로 슈퍼클래스의 인스턴스
가 서브 클래스
처럼 취급 받는게 아닙니다. 서브클래스는 슈퍼클래스의 정의를 만족하고 있기 때문에, 슈퍼 클래스 타입으로 인스턴스화 하여도 슈퍼클래스 처럼 취급 받을 수 있습니다. 그러나, 슈퍼 클래스의 인스턴스는 서브 클래스에서 오버라이딩 된 메서드나 추가된 프로퍼티로 인하여 동일하지 않습니다.
반응형
'IOS > Swift' 카테고리의 다른 글
[SWIFT] enumeration (0) | 2021.07.21 |
---|---|
[SWIFT] 초기화 (0) | 2021.07.20 |
[SWIFT] 상속 (0) | 2021.07.15 |
[SWIFT] 메서드 (0) | 2021.07.13 |
[SWIFT] 프로퍼티 (0) | 2021.07.13 |
Comments