Language/Swift

[Swift Basic] Any, AnyObject, nil

박땅콩 2022. 7. 23.
728x90

본 내용은 야곰님의 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을 다루는 내용은 차후 옵셔널 파트에서 다루도록 하겠습니다.

728x90

댓글