Swift/개념 & 응용

[Swift] Swift 문법 - 형 변환(Type Casting)과 타입 비교 / Any와 AnyObject

유정주 2021. 8. 18. 00:10
반응형

안녕하세요. 

 

오늘은 형 변환과 타입 검사에 대해 알아보겠습니다.

추가로 Any AnyObject에 대해서도 간단하게 작성하였습니다.

 

형 변환을 포스팅 내용 중 옵셔널(Optional)과 관련된 내용이 나옵니다.

혹시 옵셔널에 대해 전혀 알지 못하시는 분은 이전 포스팅을 참고해주세요.

 

Optional 포스팅 바로보기

2021.08.17 - [개발,IT,코딩] - [Swift] Swift 문법 - Optional


참고 자료

해당 포스팅은 Smile Han님의 유튜브 영상을 참고하며 작성하였습니다.

https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA


클래스와 인스턴스

클래스는 쉽게 말해 설계도라고 생각하면 됩니다.

클래스를 이용해 객체를 만들 수 있고 이를 인스턴스라고 말합니다.


형 변환(Type Casting)

업 캐스팅(up casting)

특정(자식) 인스턴스를 상위(부모) 클래스로 캐스팅하는 것입니다.

 

 

as 키워드를 이용하여 업 캐스팅이 가능합니다.

let mButton: UIButton = UIButton()
let mButton = mButton as UIControl

UIControl은 UIButton의 상위 클래스이므로 안전하게 캐스팅이 가능합니다.

 

특정 인스턴스를 상위 클래스로 캐스팅하는 것은 문제없습니다.

왜냐하면 상위 클래스로부터 생성된 인스턴스는 상위 클래스의 특성을 모두 가지고 있기 때문입니다.

따라서 업 캐스팅은 성공이 보장된다는 특성이 있고 보장된 변환(guaranteed conversion)이라고도 합니다.

 

다운 캐스팅(down casting)

어떤 클래스로부터 다른 클래스로 캐스팅하는 것을 말합니다.

보통은 해당 인스턴스의 하위 클래스로 변환합니다.

캐스팅 성공이 보장되지 않습니다.

 

as? 또는 as! 키워드를 이용합니다.

as?

캐스팅 성공 확신이 없을 경우 사용합니다.

옵셔널 타입으로 변환이 되고 변환이 안 되면 nil을 return 합니다.

따라서 옵셔널 바인딩 등을 사용해줘야 사용 가능합니다.

 

as!

성공 확신이 있을 경우 사용합니다.

반환이 되면 런타임 에러 나기 때문에 주의가 필요합니다.


타입 비교

is 연산자를 이용하여 타입 비교가 가능합니다.

지정된 객체가 검사하는 클래스의 인스턴스인지 검사합니다.

 

해당 타입인지 아닌지를 알려준다는 점에서 해당 타입을 바로 출력해주는 type(of:)와는 차이가 있습니다.

type(of:) 사용법 보러 가기

2021.08.15 - [개발,IT,코딩] - [Swift] Swift 문법 - 데이터 타입 기초

 

[Swift] Swift 문법 - 데이터 타입 기초

안녕하세요. 개발새발 블로그입니다. Swift 문법 첫 번째입니다. Swift를 시작하고 나니 확실히 간편한 언어라는 것이 느껴지네요. 첫 번째로 다룰 Swift 문법으로는 기초 데이터 타입과 변수와 상

jeong9216.tistory.com

 

예시

let a = 10

if a is Int {
	print("Yes")
} else {
	print("No")
}

실행결과

상수 a는 Int로 타입 추론이 되기 때문에 true가 되어 Yes가 출력됩니다.


Any와 Any Object

Any Object

가장 추상화된 최상위 개념으로 상속 관계가 아니라도 타입 캐스팅이 가능한 범용 타입입니다.

어떤 클래스의 객체도 저장이 가능합니다.

 

클래스만 허용하며 구조체나 열거형은 허용하지 않습니다.

 

Any

Any Object처럼 범용으로 사용할 수 있고

클래스뿐만아니라 구조체나 열거형, 함수 타입도 모두 허용합니다.


오늘은 형 변환(Type Casting)과 타입 비교, Any와 AnyObject에 대해 간단하게 알아보겠습니다.

실제 앱을 만들 때 자주 사용할 개념으로 생각됩니다.

몇 번씩 복기해야겠네요 :]

 

감사합니다! 


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

 

 

반응형