Swift

Swift | Optional

iOSDEv 2024. 1. 29. 14:33
옵셔널 타입의 기본 개념

사용하는 이유는?
정의하지 않는 변수에 접근하면 에러가 발생하므로
옵셔널이 탄생하게 되었다

 

옵셔널 타입

enum type

옵셔널 정수(실수도 가능)(... -1 0 1 ....) + nil로 이루어진 Enum type


일반 정수형보다 더 큰 범주에 속하는 nil과 optional Int (Int?)

 

nil이란?

값이 없음을 표현하지만 null과는 의미가 다르다
null

 

Pointer가 가져올 값이 없는 상태로 에러를 유발한다

그렇다고 해서 메모리 상에 존재하지 않진 않다(존재한다) null은 변수에 할당되는 것이기 때문이다

value type에서는 null을 사용할 수 없다 이유는 바로 실제 메모리에서 null을 0으로 기록되기 때문에 값 타입의 변수는 자신의 코드 상에서 할당받는 값이 그대로 기독 된다 그래서 값타입에서 사용하고 싶다면 내부적으로 참조타입으로 변환하고 처리해야한다

 

 

nil

값이 없음을 나타내는 뜻이지 실제 값이 정말정말 없다 라는 뜻이 아니다

 

정식표기

 

옵셔널 기본값 설정

 

옵셔널 끼리 연산은 가능할까?

불 가 능

 

불가능한 이유는 만약 하나는 값을 가지고 있고 하나는 값이 없는 경우에 어떻게 동작해야할까? 이러한 ㄴ상황에서 언어가 자동적으로 처리하기 어렵기 때문에 옵셔널 타입 간의 직접적인 연산이 허용되지 않는다 

하지만 옵셔널 값을 다루기 위한 특별한 연산자 메서드를 사용하여 값을 추출하고 연산하는 것이 권장된다

이러한 방식으로 존재 여부를 명시적으로 다룰 수 있고 예측 가능한 동작을 유지할 수 있다

이러한 상황이 발생할 수 있기 떄문에 애초에 연산은 불가능하다

 

nil로 초기화 되어있는걸 강제로 추출한다면?
ERROR

그래서 안전하게 추출하는 법과 강제로 추출하는 법이 있다
강제로 추출하는 법은 변수가 반드시 nil이 아닌경우에만 사용해야 한다

옵셔널 값을 추출하는 방법 ( 총 4가지)

 

1. 강제로 추출하는 방법 
   : ! 사용

옵셔널 타입 강제로 추출이지만 값이 없는 nil일 경우 에러 (웬만한 경우에 사용하지 않음)

2. if문 사용하여 nil값이 아닐 때 추출
: 값의 유무 판단후 추출

3. 옵셔널 바인딩 (if let) / (guard let)
: nil인 경우 담기지 않고 nil이 아닌 경우 담김

4.닐 코어레싱 연산자 사용( Nil Coalescing)
 : ?? 물음표 두개를 사용하여 nil인 경우 뒤에 있는 값을 사용하고 nil이 아닐시 그냥 변수에 저장된 값을 사용한다

 

 

 

옵셔널 체이닝

?.

옵셔널 가능성이 있다는 표현을 뜻함
옵셔널 타입으로 선언된 값에 접근하여 속성이나 메서드를 사용할 때 접근연산자(.)앞에 물음표(?)를 붙여야한다 ?. 

항상 옵셔널 타입으로 리턴이됨
옵셔널 체이닝 과정에서 nil을 return한다면 이어지는 표현식을 끝까지 평가하지않고 바로 nil을 return해버린다

 

 

 

옵셔널 체이닝을 사용하지 않을시 이렇게 오류가 날 수 있다

 

 

그래서 이런식으로 접근을 하거나 출력을 하고싶다면 하단의 방법으로 추출하는 방법이 있다

 

?. 와 ?()의 차이
?.의 경우 옵셔널타입에 접근을 하는 경우
?()함수가 없을 수도 있다라는 뜻임

 

 

 

선언부터 !를 붙일 수 있는 타입
IUO Type(Implicitly Unwrapped Optional)

 

Int형으로 옵셔널 정수형이 들어가면서 정수형으로 변환되어 optioanl(7)이 아닌 7이 print됨

함수 옵셔널 사용

옵셔널로 Nil을 기본값으로 설정할 시 함수를 하용할 때 생략하거나 타입에 맞는 값을 넣을 수 있다

 

 

 

인프런 swift 앨런 문법 강의를 듣고 기재했습니다