본 내용은 야곰님의 Swift 기본문법 강좌를 듣고 개인적으로 학습하여 정리한 내용입니다.
목차
- Any, AnyObject
- nil
✅ Any, AnyObject
Any, AnyObject 타입은 기본 데이터 타입은 아니지만, 데이터 타입 위치에서 특별한 역할을 수행합니다.
Any : 모든 데이터 타입을 할당할 수 있습니다.
AnyObject : Any보다 한정된 범위이며 모든 클래스의 인스턴스를 할당할 수 있습니다.
그렇다면 먼저 Any 의 예시를 살펴보겠습니다.
import UIKit
var anyValue : Any = "나는야 다 받을 수 있어!"
anyValue = 100
anyValue = 123.45
anyValue = "🤓"
// var charValue : Character = anyValue // Error
2 ~ 6번째 줄 코드를 보면 Any 타입으로 지정한 후
String -> Int -> Double -> Character 순으로 값을 할당했습니다.
컴파일 오류 없이 정상 동작 확인 했으며, 모든 데이터 타입의 값을 할당 할 수 있다는 것을 알게되었습니다.
하지만, 8번째 줄에서
Character 타입의 변수 charValue 에 Any 타입의 변수를 할당하려 했으나 에러가 발생합니다.
Any 타입에 Character 값을 할당해두었더라도, Character 타입이 아니기 때문에 할당할 수 없습니다.
할당할 수 없는 이유는 Swift 데이터 타입이 구조체이기 때문이라고 합니다.
하지만 할당하는 방법이 있는데 할당하기 위해서는 명시적으로 타입 변환이 필요합니다.
해당 내용에 대해서는 차후에 다루겠습니다.
다음으로 AnyObject 의 예시를 살펴보겠습니다.
import UIKit
class Person {
var age : Int = 30
var tall : Int = 180
let weight : Double = 72.4
}
class Blank {}
var anyobjectValue : AnyObject = Person()
anyobjectValue = Blank()
// var blankValue : Blank = anyobjectValue // Error
11번째 줄 코드에서 AnyObject 타입으로 지정 후 Person 클래스 인스턴스를 할당하고
12번째 줄 코드에서 Blank() 클래스 인스턴스를 할당했습니다.
컴파일 오류 없이 정상 동작 확인 했으며, 모든 클래스 인스턴스를 할당 할 수 있다는 것을 알게되었습니다.
14번째 줄 코드에서 AnyObject 또한 AnyObject에 Blank 클래스 인스턴스를 할당해두었더라도
Blank 클래스 타입이 아니기 때문에 할당할 수 없습니다.
✅ nil
nil 은 없음을 의미하는 키워드입니다.
다른 언어에서 nullptr, NULL과 유사한 표현입니다.
그렇다면, 모든 데이터 타입을 할당 할 수 있는 Any와 모든 클래스 인스턴스를 할당 할 수 있는 AnyObject는 nil을 할당할 수 있을까요?
import UIKit
// var testA : Any = nil // Error
// var testB : AnyObject = nill // Error
정답은 아니요입니다.
Any, AnyObject 타입은 nil을 할당할 수 없습니다.
nil을 다루는 내용은 차후 옵셔널 파트에서 다루도록 하겠습니다.
'Language > Swift' 카테고리의 다른 글
[Swift Basic] 함수 기본 (0) | 2022.07.25 |
---|---|
[Swift Basic] 컬렉션 타입 (0) | 2022.07.24 |
[Swift Basic] 기본 데이터 타입 (0) | 2022.07.23 |
[Swift Basic] 상수와 변수 (0) | 2022.07.23 |
[Swift 기초] 이름 짓기, 콘솔 로그, 문자열 보간법 (0) | 2022.07.23 |
댓글