본문 바로가기
iOS/Swift

[Swift] Optional (1)

by Jiseong 2021. 8. 18.

 

Swift는 Optional이라는 중요한 개념을 갖고있다. 정말 중요하다.

 

Optional은 Type Casting이나, nil value check 등 에 중요한 역할을 한다.

 

Optional은 '?'을 변수나, 변수 타입에 붙여 표현한다

Optional의 '?' 의 뜻은 "이 변수에는 값이 들어갈 수도 있고, 안들어갈 수도 있어 (nil)"

인용 처음 써보는데 글씨체 이쁘네..

 

오 글씨체 바꿨다. 이쁘다.

 

예를 들어보겠다. 아 글씨체

 

ㅇㅇㅇ아 왜이래, 다시 예를 들어보겠다. 

 

Optional의 기본 형태는 다음과 같다.

let myOptional: Int?

 

변수나 상수를 정의할 때 타입 뒤에 '?'을 명시해주면 그 변수, 상수는 Optional이 된다.

 

요렇게

Swift는 변수 선언시 변수에 nil값이 들어가는 것을 허용하지 않는다.

변수에 nil 값이 들어간다면, 코드가 돌아가다가 죽는 것도 아닌 (런타임 에러), 컴파일도 허용치 않는다. (컴파일 에러)

 

해볼까?

 

어 사진을 계속 넣는다면 혹여나 읽으실 분들이 스크롤이 힘드실 수 있으니..

 

var myOptional: Int = nil
/* error: optional.playground:3:23: error: 'nil' cannot initialize specified type 'Int'
var myOptional: Int = nil */

nil 값은 myOptional을 초기화하지 못해. 니가 선언한 myOptional은 Int 타입이잖아 라는 에러를 띄우며,

또 아주 친절한.. 친절..네.. 여튼 친절함을 가진 컴파일러

 

optional.playground:3:17: note: add '?' to form the optional type 'Int?' 

var myOptional: Int = nil 

(야, nil로 초기화하고싶으면, '?' 추가해서 옵셔널 변수 만드셈)

 

라며 손수 수정 방법도 알려주신다. 역시 위대하십니다. 

 

 

nil의 개념 또한 중요하다.

 

절대 헷갈리지 말아야한다.

 

nil은 null과 다르다.

다른 언어,objc는 null은 포인터의 부재를 표현하지만, Swift에서 nil은 포인터의 부재가 아닌, 특정 타입에 대한 값의 부재를 나타낸다. Swift는 포인터 개념이 없음

 

나도 예전엔 그런 경험이 있어서 추가로 말하는데, 0과 nil은 확실히 다르단 것을 알아야한다. 절대 다르다. 절대.

난 null = 0 인줄 아는 경험을 했었다.

0은 숫자다 숫자. 만약 변수선언시 0을 넣어줬다면 그 변수 내부는 빈 것이 아니라 숫자 0이 저장되어 있는 것이다.

하지만 nil은 빈 것이다. 위에서 말했듯이 "값의 부재"

 

내가 아는것이 혹시 틀렸나? 싶어서 더 구글링해보았다.

 

Swift는 null이 없으니 null을 nil로 생각하고 보면된다.

 

그냥 잘 모르겠으면 스위프트에서 null은 nil이구나 하십쇼

 

 

다음 (2)에선 래핑, 강제 언래핑, 바인딩.. 더 나아간다면 체이닝까지 써보겠다.

 

아 글 좀 자주 써야지.. 하루종일 잡고있는데 깃이랑 글은 신경을 못쓰고있다. 반성해야지..

 

 

 

 

 

 

'iOS > Swift' 카테고리의 다른 글

[Swift] API Design Guidelines  (0) 2021.08.24
[Swift] Optional (2)  (0) 2021.08.19
[Swift] Struct Mutating  (0) 2021.08.11
[Swift] Class & Structure  (0) 2021.08.11
계산기  (0) 2021.08.07

댓글