본문 바로가기

Swift 문법

[Swift] 기본 자료형에 대해 알아보자! - 3 (Any, AnyObject, nil)

반응형

지난 포스팅에서는 Bool, Character, String 자료형에 대해 알아보았는데요,

이번 포스팅에서는 Any, AnyObject, nil에 대해서 간단하게 알아보도록 하죠!

Any

Any는 따로 공식문서에 나와있지 않네요.. (제가 못찾는 것일까요?)
Any는 말 그대로 Swift의 모든 데이터 타입을 사용할 수 있다는 뜻이에요.

아래 코드를 보면 어느 자료형이 들어가도 할당되는 것을 볼 수 있어요.

image

물론 아직 포스팅하진 않았지만 [Any] 배열에는 다른 데이터 타입이 들어가도 상관 없습니다.

image

AnyObject

image

  • AnyObject는 프로토콜이고, 모든 클래스가 AnyObject 프로토콜을 준수하고 있다고 하네요!

아직 프로토콜과 클래스에 대한 이해가 부족할 수 있으실 거에요!
일단 지금은, Any는 모든 데이터 타입을 사용할 수 있지만, AnyObject는 클래스의 인스턴스만 할당할 수 있다고 알고 계시면 될 것 같아요.

image

Int 자료형은 구조체(Struct)로 되어있던 것이 기억나시나요?
AnyObject는 클래스의 인스턴스만 할당할 수 있으므로, AnyObject에 할당하려고 하면 오류가 나게됩니다.

image

클래스의 인스턴를 할당해주면 오류가 나지 않는 것을 확인할 수 있습니다!

여기서 드는 생각은 그러면 모든 자료형을 Any로 할당해줘서 사용하면 되지 않겠느냐!
하는 생각이 드실 수 있습니다. (저도 그랬습니다.)

하지만 그렇지 않습니다..

Swift는 타입에 엄격합니다. 따라서 Any로 선언된 값을 사용하려면 매번 타입을 변환해주거나 하는 번거로움이 있고, 예상치 못한 오류가 날 확률이 증가할 것입니다.

한번 Any로 선언된 자료형들끼리 연산을 해볼까요?

image

Int 자료형으로 했을 때, 당연시 됐던 것들이 안되네요..
"+" 연산을 Any 자료형에는 적용할 수 없다는 오류가 나네요.. 이를 어떻게 해결해야 할까요?

image

as? 라는 문법을 처음 보시는 분들도 계시겠지만, 이는 Any 자료형을 강제로 Int 자료형으로 변경한다! 라고 이해하시면 될 것 같아요.

따라서 Any타입은 지양하는 편이 좋고, 정확한 타입을 명시하는 것이 좋습니다.

nil

nil은 "없음" 을 나타내는 Swift의 키워드 입니다.
다른 언어를 접하셨던 분들이라면 null에 익숙하시죠? null과 비슷한 개념이라고 이해하시면 될 것 같아요.
하지만 둘은 다릅니다.
음.. null은 포인터가 가리키는 객체가 없는 것? 어느것도 가리키지 않는 포인터 입니다.
하지만 Swift에서는 포인터라는 개념이 없고, 단순히 nil은 값이 없다.. 라는 뜻으로 이해하시면 될 것 같아요.
nil에 대해서는 옵셔널에 대한 이해를 하시게 된다면 더 와닿으실 겁니다!

이번 포스팅에서는 Any, AnyObject, nil에 대해서 알아보았습니다.
다음 포스팅에서는 부동소수 타입인 Float, Double에 대해서 알아보도록 합시다!

포스팅 읽어주셔서 감사합니다.
지적 댓글 환영입니다!

반응형