관리 메뉴

사적공간

옵셔널 Optional 본문

ios/문법

옵셔널 Optional

2sac 2023. 2. 22. 13:32

출처 :꼼꼼한 재은씨의 swift 문법/이재은/루미페이퍼

 

 

오류를 발생시키지 않으면서 문제가 있음을 알려주기 위해 nil이라는 값을 반환함. 

 

옵셔널 타입만 nil을 반환함. 

 

 

옵셔널 타입으로 선언된 자료형은 nil을 저장할 수 있음. 옵셔널 타입은 자료형 마다 종류가 다 다름. Optinal Int, Optional String... 

옵셔널 타입임이란 반환하고자 하는 값을 옵셔널 객체로 다시 한 번 감싼 형태. 

 

옵셔널 타입이 가질 수 있는 값은 두 종류임. 

1. nil이 아닌 값 ( 123, abc 같은 값이 아님) = 옵셔널 객체로 감싸진 객체 (이렇게 감싸는걸 옵셔널 래핑, 추출할 때는 옵셔널 언래핑) 

2. nil  (문제가 있을 경우) 

 

 

옵셔널 타입의 선언과 정의

 

 

 

 

 

옵셔널 값 처리 

 

옵셔널 타입으로 반환된 값을 가지고는 아무것도 할 수 없음. (옵셔널 타입은 연산을 지원하지 않기 때문)

 

출처: chatGpt

 

옵셔널 값을 사용하기 위해선  언래핑을 해야 함. 방식은 두 가지 

 

-명시적 해제 ( 강제 해제, 비강제 해제) 

-묵시적 해제( 컴파일러에 의한 자동해제, !연산자를 사용한 자동해제) 

 

 

 

 

 

 

 

강제해제

 

옵셔널 타입 선언 연산자 ? 

 

옵셔널 해제 연산자 !

 

 

 

 

옵셔널 값이 nil인경우  강제해제 연산자를 써서 해제 시키고 쓰면 오류가 발생할 수 있으므로 먼저 옵셔널 값이 nil이 아닌 것부터 점검해야 함.

 

 

정수형으로 변환된 a값은 b에 옵셔널 값으로 저장됨. 옵셔널 선언 ? 를 안썼는데. 왜 그런지는 모르겠음.

 

 

문장 a는 정수화 할 수 없어서 b에는 nil 값이 있고, if문에서 nil값은 해제 안함.

 

 

변수 != 값, 변수와 != 사이를 띄워야 구문에 오해가 없음 

 

 

 

 

 

옵셔널 바인딩

명시적이며, 비강제적인 옵셔널 해제방법 

 

옵셔널 바인딩은 조건문 내에서 일반 상수에 옵셔널 값을 대입하는 방식임

 

그리고 대입한 그 값은 true/false 임. 

 

일반 변수나 상수에 옵셔널 값이 할당되면서 강제해제연산자를 안 써도 자연스럽게 옵셔널이 해제 됨. 

 

 

 

 

 

guard 구문을 활용하기도 하는데, guard 구문은 조건에 맞지 않으면 무조건 함수의 실행을 종료시키는 특성이 있기 때문에 옵셔널 값이 해제되지 않으면 더 이상 진행이 불가능할 때만 씀 

 

 

 

 

 

 

 

 

딕셔너리에 키 값으로 접근해도 결과값을 옵셔널로 반환함 

 

딕셔너리의 키 값은 해쉬프토콜을 구현된 모든 자료형이라 잘못 입력할 가능성이 높아서 기본적으로 옵셔널 타입으로 정의된 값을 반환함 

 

 

 

 

 

컴파일러에 의한 옵셔널 자동해제

 

 

옵셔널 객체의 값을 비교할 때, 한 쪽이 옵셔널, 다른 한쪽이 일반 타입이면, 자동으로 옵셔널 타입을 해제하여 비교 연산을 수행함. 

 

 

 

 

옵셔널의 묵시적 해제

옵셔널 변수의 타입을 선언할 때, 묵시적 해제를 미리 선언해 주어야 함 

 

옵셔널 타입 변수의 연산도 간단하게 처리가능

 

? 대신 ! 붙임.

 

변수의 값이 nil이 될 가능성이 있다면 묵시적 옵셔널 해제를 사용하지 않아야 함. 

 

 

 

 

 

 

'ios > 문법' 카테고리의 다른 글

Swift 구조체와 클래스: 객체지향 스위프트  (0) 2023.03.09
Swift 함수  (0) 2023.02.22
swift 집단 자료형  (0) 2023.02.17
swift 기본문법  (0) 2023.02.16