seong_hye, the developer

Swift) 문법 정리 - 옵셔널(Optional) / 옵셔널 바인딩 본문

IOS

Swift) 문법 정리 - 옵셔널(Optional) / 옵셔널 바인딩

seong_hye 2022. 7. 12.

 

Swift에서 다른 프로그래밍 언어에는 없는 새로운 개념을 만들었다.

기존의 타입은 메모리 공간에 어떤 형태로 자료가 들어있음을 알려주는 것이였다

하지만 만약 메모리에 저장된 값이 없는데 접근한다면?

에러가 발생하며 앱이 꺼지게 된다.

 

이런 상황을 방지하기 위해 탄생한 것이 바로 옵셔널 타입이다.


옵셔널(Optional) 타입이란?

변수 또는 상수에 값이 할당되지 않은 상황을 처리하기 위해

안전하고 일관된 접근 방식을 제공하는 것

var number: Int?
var name: String?

 

- 변수를 선언할 때, 데이터 타입 선언 다음에 '?' 문자를 두어 옵셔널이 되도록 한다.

- number와 name은 어떤 값도 할당되지 않은 nil 값을 가지게 된다.

 

주의할 점!!

- 할당된 값이 없거나 nil을 할당할 수 있는 것은 옵셔널 타입뿐이다.

- 옵셔널이 아닌 변수 또는 상수에는 nil(값이 없음을 나타내는 키워드)을 할당할 수 없다.

- 옵셔널 타입끼리의 연산은 불가능하다.

- optinal은 실제로 값이 없는 것이 아닌 임시적인 타입을 담아두고 있는 것이다.

- optional은 한번 걸러서(추출해서) 사용해야 한다.

==> 옵셔널 타입은 값이 없는 경우를 포함하는 타입이다.

==> 옵셔널타입과 옵셔널이 아닌 타입은 서로 다른 타입이다.

 


옵셔널 값의 추출 방법

 

1. 강제 언래핑(Forced unwrapping)

nil이 아닌 값이 있다는 것을 확신하고 강제로 값을 추출 (값이 없는 경우 에러)

옵셔널 데이터 타입에서 옵셔널 이름 뒤에 느낌표(!)를 두어 추출

var number: Int?

number = 3

print(number!)

 

2. nil 아닌지 확인후 , 강제 추출

 

if문을 통해 nil이 아님을 먼저 확인 후 강제 추출 (에러가능성이 없어짐)

var number: Int?

number = 3

if number != nil {
	print(number!)
}

 

3. 옵셔널 바인딩 (Optional binding)

바인딩(상수나 변수에 대입)이 되는 경우만 특정 작업을 하겠다는 의미

- 지정된 옵셔널이 값을 가지고 있는지를 확인

- 옵셔널 변수가 값을 가지고 있는 경우에 선언된 선언된 상수 또는 변수에 그 값을 할당하는 코드가 실행

var number: Int?

number = 3

if let number = number {
	print(number)
}

number 변수에 할당된 값이 언래핑되어 number라는 임시 상수에 할당되어 사용

임시 상수는 if문 안에서만 유효함

옵셔널로 할당된 동일한 이름은 충돌이 발생하지 않음


if let 바인딩과 guard let 바인딩의 차이

- if let 바인딩의 경우 임시 상수가 if문 안에서만 유용

- guard let 바인딩의 경우 가드문에서 선언된 변수를 아래문장에서 사용 가능

(동일한 스코프로 취급)

var number: Int?

number = 3

guard let n = number else { return }
print(n)

4. 닐 코얼레싱 (Nil- Coalescing)

옵셔널 표현식 뒤에 기본값을 제시해서, 옵셔널의 가능성을 없앰

물음표 2개 (??)를 사용해 앞의 옵셔널 값이 nil이면 물음표 뒤의 값을 기본값으로 제시함

var number: Int?

print(number ?? 3)

 

닐 코얼레싱 방법은 삼항연산자를 활용한 방법으로도 풀이가 가능함

var number:Int?

print(number != nil ? number! : 3)

옵셔널에 대한 이해를 제대로 하려면

많이 써보는 방법이 최고일 듯하다


참고자료)

https://zrr.kr/qNHN

 

앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정) 강의 - 인프런

Swift문법을 제대로 이해, 활용해보고자 하는 철학을 바탕으로 과정이 설계되었습니다. 코딩에 대해 1도 모르는 비전공자를 시작으로 네카라쿠배에 입사할 수 있는 초고급 수준까지 올리는 것을

www.inflearn.com

 

Comments