지난 포스팅에서는 Bool, Character, String 자료형에 대해 알아보았는데요,
이번 포스팅에서는 Any, AnyObject, nil에 대해서 간단하게 알아보도록 하죠!
Any
Any는 따로 공식문서에 나와있지 않네요.. (제가 못찾는 것일까요?)
Any는 말 그대로 Swift의 모든 데이터 타입을 사용할 수 있다는 뜻이에요.
아래 코드를 보면 어느 자료형이 들어가도 할당되는 것을 볼 수 있어요.
물론 아직 포스팅하진 않았지만 [Any] 배열에는 다른 데이터 타입이 들어가도 상관 없습니다.
AnyObject
- AnyObject는 프로토콜이고, 모든 클래스가 AnyObject 프로토콜을 준수하고 있다고 하네요!
아직 프로토콜과 클래스에 대한 이해가 부족할 수 있으실 거에요!
일단 지금은, Any는 모든 데이터 타입을 사용할 수 있지만, AnyObject는 클래스의 인스턴스만 할당할 수 있다고 알고 계시면 될 것 같아요.
Int 자료형은 구조체(Struct)로 되어있던 것이 기억나시나요?
AnyObject는 클래스의 인스턴스만 할당할 수 있으므로, AnyObject에 할당하려고 하면 오류가 나게됩니다.
클래스의 인스턴를 할당해주면 오류가 나지 않는 것을 확인할 수 있습니다!
여기서 드는 생각은 그러면 모든 자료형을 Any로 할당해줘서 사용하면 되지 않겠느냐!
하는 생각이 드실 수 있습니다. (저도 그랬습니다.)
하지만 그렇지 않습니다..
Swift는 타입에 엄격합니다. 따라서 Any로 선언된 값을 사용하려면 매번 타입을 변환해주거나 하는 번거로움이 있고, 예상치 못한 오류가 날 확률이 증가할 것입니다.
한번 Any로 선언된 자료형들끼리 연산을 해볼까요?
Int 자료형으로 했을 때, 당연시 됐던 것들이 안되네요..
"+" 연산을 Any 자료형에는 적용할 수 없다는 오류가 나네요.. 이를 어떻게 해결해야 할까요?
as? 라는 문법을 처음 보시는 분들도 계시겠지만, 이는 Any 자료형을 강제로 Int 자료형으로 변경한다! 라고 이해하시면 될 것 같아요.
따라서 Any타입은 지양하는 편이 좋고, 정확한 타입을 명시하는 것이 좋습니다.
nil
nil은 "없음" 을 나타내는 Swift의 키워드 입니다.
다른 언어를 접하셨던 분들이라면 null에 익숙하시죠? null과 비슷한 개념이라고 이해하시면 될 것 같아요.
하지만 둘은 다릅니다.
음.. null은 포인터가 가리키는 객체가 없는 것? 어느것도 가리키지 않는 포인터 입니다.
하지만 Swift에서는 포인터라는 개념이 없고, 단순히 nil은 값이 없다.. 라는 뜻으로 이해하시면 될 것 같아요.
nil에 대해서는 옵셔널에 대한 이해를 하시게 된다면 더 와닿으실 겁니다!
이번 포스팅에서는 Any, AnyObject, nil에 대해서 알아보았습니다.
다음 포스팅에서는 부동소수 타입인 Float, Double에 대해서 알아보도록 합시다!
포스팅 읽어주셔서 감사합니다.
지적 댓글 환영입니다!
'Swift 문법' 카테고리의 다른 글
[Swift] 튜플 (tuple) 에 대해 알아보자! (0) | 2022.12.21 |
---|---|
[Swift] 기본 자료형에 대해 알아보자! - 4 (Float, Double) (1) | 2022.12.20 |
[Swift] 기본 자료형에 대해 알아보자! - 2 (Bool, Character, String) (0) | 2022.11.08 |
[Swift] 기본 자료형에 대해 알아보자! - 1 (Int, UInt) (0) | 2022.11.07 |
[Swift] let, var의 차이 (0) | 2022.11.06 |