Any
Any는 Swift의 모든 데이터 타입을 사용할 수 있다.
변수 또는 상수의 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떤 종류의 데이터 타입이든지 상관없이 할당할 수 있다!
일반적으로 정수형으로 선언한 변수나 상수는 정수형 데이터를 저장 후에 정수형 이외의 데이터 타입을 저장하려고 하면 오류가 발생한다.
아래 코드는 정수형 변수 something에 100을 할당 후 문자열 "Glasses"를 저장한 것이다. 당연히 오류 발생.
var something: Int = 100
something = "Glasses" // 오류 발생
print(something)
|
하지만 Any타입에서는 뭐든지 가능하다. 아래 코드는 Any타입인 something 변수에 정수형, 문자열, 소수형 값을 할당했다.
var something: Any = 100
print(something) // 100 출력
something = "IPhone"
print(something) // IPhone 출력
something = 1.123
print(something) // 1.123
|
NOTE
Any는 될 수 있으면 사용하지 않는 것을 추천한다. 타입에 상당히 엄격한 Swift의 특성 상 Any 또는 AnyObject로 선언된 변수의 값을 가져가 쓰려면 매번 타입 확인 및 변환을 해줘야 하는 불편함이 있을뿐더러 예기치 못한 오류의 위험을 증가시키기 때문이다.
앞서 타입 추론 때도 설명했지만 타입은 될 수 있는 한 명시하는 것이 좋다.
nil
nil은 Any처럼 특정 타입이 아니라 '없음'을 나타내는 키워드이다.
var nilTest: Int? = 100
// nillTest 변수는 졍수형 타입 100을 저장하고 있다.
nilTest = nil
// nilTest 변수는 아무런 값도 저장하지 않고 있다.
|
nil은 non-optional 변수나 상수에서는 사용할 수 없다. 만약 상수나 변수가 특정 조건에서 값이 없는 상태에서 작동해야 하는 경우가 있다면 항상 optional 변수로 선언하자.
만약 값을 할당하지 않고 optional 변수로 선언하면 변수는 자동적으로 nil로 세팅된다.
var nilTest: Int? // 아무 것도 저장이 되지 않은 nil 상태
|
다른 프로그래밍 언어를 해 본 사람은 null값이라고 생각하면 편할 것 같다. 변수나 상수에 값이 없는 경우, 즉 nil이면 해당 변수나 상수에 접근했을 때 잘못된 메모리 접근으로 런타임 오류가 발생한다.
잘못된 메모리에 접근하여 발생하는 런타임 오류는 Null Pointer Exception 이라고 불린다.
'언어 > Swift 5' 카테고리의 다른 글
[Swift 5] In-out 파라미터 사용 방법 (1) | 2020.03.24 |
---|---|
[Swift 5] 함수의 오버로딩(Overloading)이란? (0) | 2020.03.24 |
[Swift 5] 함수 사용 방법 (0) | 2020.03.23 |