SlideShare a Scribd company logo
1 of 22
Download to read offline
Swift 타입 파트 1
오근현 소프트웨어 엔지니어
#Go To Swift 162번째 시간
학습목표
• Swift의 타입에 대한 특징을 이해할 수 있다.
• Value-Type에 대해 이해할 수 있다.
• optionals 에 대해 이해할 수 있다.
변수/상수 선언
• 변수
• 상수
• 명료한 타입은 선언 시 삭제 가능
타입 값변수명
타입 값변수명
타입 분류
• named types
• classes, structures, enumerations, and protocols
• arrays, dictionaries, and option values
• compound types: function types and tuple types
타입 특징
• 강한 타입
• Value-Type (물론 reference type도 있음)
강한 타입
• 타입을 엄격하게 준수함
• 약한 타입 언어? python, javascript, C, C++, Objective-C …
• 예제: C 언어에서 아래와 같이 사용하는 것이 유효함
• char c;
• int i = c;
• 약한 타입 언어는 명확하지 않은 코드를 만들어냄
Value-Type
• NSString 변수를 파라메터로 넘기거나 다른 변수에 할당하면 reference
count가 증가
• String 변수를 파라메터로 넘기거나 다른 변수에 할당하면 아예 새로운
변수가 할당되고 값을 메모리를 복사 (String의 내부 데이터는 reference
count로 관리함. 지금 얘기하면 헷갈릴테니 이건 “Swift 성능의
이해”에서..)
• NSString은 reference type, String은 value type
• value type은 할당할 때, 값 자체를 복사하여 source 변수와 target 변수
사이의 연관성이 없음
Value-Type 동기
• Local Reasoning
• 코드는 관련 영역만 보았을때, 이해가 되어야함
• Reference-Type을 사용하였을 경우, 함수 호출 후나 다른 쓰레드 등에서 변
수의 값이 변경될 수도 있음 ==> 코드를 확인할 때 이런 부분들도 같이 확
인해야함
• Performance
• Reference-Type에서 타입을 생성할때 힙에 할당하는데 힙에 할당하는 비용
이 Stack에 할당하는 비용에 비해 훨씬 큼
• Reference-Type에서 다른 함수의 파라메터로 변수를 전달하는 등을 수행할
때 reference count를 관리하는데 이 때 비용이 많이듦
• 자세한 것은 “Swift 성능의 이해”에서….
Value-Type 사용
Optionals
nil
val
ue
or
optionals(계속)
• 값이 있는지 없는지를 나타내는 타입 유형
• 상자가 있고 상자 안이 비워져 있는지, 상자 안에 값이 있는지
를 나타냄
• 값이 비워져 있으면 nil, 채워져 있으면 nil이 아님
• C/C++의 포인터와 유사하지만 다른 개념. 메모리 주사가 아니라
값이 있고 없고의 구분임
타입 뒤에 물음표를 붙여서 표기
optionals는 왜 있나?
• API의 성공 실패를 나타내기 위한 무수히 많은 반환값들…
• NULL, error code, BOOL, NSNotFound, -1… 등등
• API 마다 반환 값을 알아야함. 구현도 어렵고 실수하기도 쉽
고 가독성도 떨어짐
• API에서 어떤 값을 얻어올때 실패하면 nil, 성공하면 nil이 아
닌 값을 Type-safe하기 반환하기 위해 optionals를 사용
optionals 예제
number 1 is not nil 만 출력
unwrapping
• 상자 속에서 값을 꺼내오기 위해 unwrapping(까보기)함
• nil이 아닌 optional 뒤에 !(느낌표)를 붙여서 값을 얻어올 수
있음
optional binding 1: if-let
• optionals의 문제점? unwrapping을 해야하는 귀찮음
• if let “타입” = “옵셔널 타입” {}
• optional type이 nil이면 if문 조건에 들어가지 않음
• optional type이 nil이 아니면 타입에 unwrapping된 값이 할당
됨
optional binding 1: if-let(계속)
optional binding 1: if-let(계속)
• if문은 프로그램에서 조건에 따른 논리 분기를 위해 사용
• 오류를 처리하기엔 몇가지 불편함이 있음
• 계속 계속 depth가 깊어지면서 구현의 어려움과 가독성 저하
를 가져옴
• 오류를 처리하기 위한 if문인지 논리의 분기를 위한 if문인
지 가독성의 문제가 있음
optional binding 2: guard-let
• if를 대신해서 오류를 분류하기 위한 guard 구문 추가
• else가 반드시 있어야함
• return 또는 break(순환문내에서 쓰일 경우)가 반드시 있어야함
• 물론, if문 처럼 optional binding에만 쓰이지는 않음
• guard문에서 unwrapping된 값은 guard문 바깥에서도 사용 가능
optional binding 2: guard-let(계속)
unwrapping된 값은 guard문 밖에서도 유효함
optional chaining
• optionals를 연속하여 사용 가능
• 위의 chaining 중 하나라도 nil이면 nil이 반환되어 if문에 들
어가지 못함
• optionals를 간편하게 사용하기 위한 방법
Implicitly unwrapped optionals
• optionals의 값을 받긴 하지만 nil이 아닌 것을 내가 알고 있음
• 굳이 번거롭게 매번 unwrapping해서 사용해야하나?
• Implicitly unwrapped을 사용하여 직접 값에 접근 가능
• 제일 대표적으로 볼 수 있는 예제가 interface builder를 통해 생성한
@IBOutlet 변수 ==> nil이 되면 안되고, nil이 되지 않을 것을 확신
• 사용할 땐 아래와 같이 편하게(!) 사용하면됨
• 해당 값이 nil이 되면 오류가 발생
• 귀차니즘으로 인한 unwrapping의 남발은 가독성과 안정성에 좋지 않을 수
도 있음!
?? Operation
• optional의 값을 얻어 변수를 할당할 때, ?? 연산자를 통해 할당 하
려는 값이 nil인 경우의 default값을 넣어줄 수 있음
• optional value ?? default value
• optional value가 nil이 아니면 optional 안에 있는 값이 할당되고
optional이 nil이면 default value가 할당

More Related Content

What's hot

Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3현찬 양
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinDong Chan Shin
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성흥래 김
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2세빈 정
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Mark Lee
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2Injae Lee
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 

What's hot (20)

Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
Java generics
Java genericsJava generics
Java generics
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
1 2 1
1 2 11 2 1
1 2 1
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 

Similar to [SwiftStudy 2016] 2장. Swift 타입 파트 1

Swift5 vs objective c
Swift5 vs objective cSwift5 vs objective c
Swift5 vs objective cBill Kim
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++Min-soo Park
 
How to use the Ruby programing language
How to use the Ruby programing languageHow to use the Ruby programing language
How to use the Ruby programing languageJaeYeoul Ahn
 
인프콘-타입스크립트는 왜 그럴까?-이정환.pdf
인프콘-타입스크립트는 왜 그럴까?-이정환.pdf인프콘-타입스크립트는 왜 그럴까?-이정환.pdf
인프콘-타입스크립트는 왜 그럴까?-이정환.pdf이정환
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차HyunJoon Park
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2Injae Lee
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)용호 최
 
Swift 세미나
Swift 세미나Swift 세미나
Swift 세미나용재 김
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본용호 최
 
Hello Swift 2/5 - Basic2
Hello Swift 2/5 - Basic2Hello Swift 2/5 - Basic2
Hello Swift 2/5 - Basic2Cody Yun
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swiftNAVER D2
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2Minseok Jang
 
유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼Jemin Lee
 

Similar to [SwiftStudy 2016] 2장. Swift 타입 파트 1 (20)

Swift5 vs objective c
Swift5 vs objective cSwift5 vs objective c
Swift5 vs objective c
 
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
NHNNEXT 개경프14 Subway Rocket Team Study 3rd C++
 
How to use the Ruby programing language
How to use the Ruby programing languageHow to use the Ruby programing language
How to use the Ruby programing language
 
인프콘-타입스크립트는 왜 그럴까?-이정환.pdf
인프콘-타입스크립트는 왜 그럴까?-이정환.pdf인프콘-타입스크립트는 왜 그럴까?-이정환.pdf
인프콘-타입스크립트는 왜 그럴까?-이정환.pdf
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
Python
PythonPython
Python
 
C++ Advanced 강의 5주차
C++ Advanced 강의 5주차C++ Advanced 강의 5주차
C++ Advanced 강의 5주차
 
Effective c++ 정리 1~2
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
Java to Kotlin
Java to KotlinJava to Kotlin
Java to Kotlin
 
Swift 세미나
Swift 세미나Swift 세미나
Swift 세미나
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
Hello Swift 2/5 - Basic2
Hello Swift 2/5 - Basic2Hello Swift 2/5 - Basic2
Hello Swift 2/5 - Basic2
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼유니티 C# 기초 튜토리얼
유니티 C# 기초 튜토리얼
 

More from Keunhyun Oh

Mastering Python chapter3
Mastering Python chapter3Mastering Python chapter3
Mastering Python chapter3Keunhyun Oh
 
[SwiftStudy 2016] 1장. Swift 소개
[SwiftStudy 2016] 1장. Swift 소개[SwiftStudy 2016] 1장. Swift 소개
[SwiftStudy 2016] 1장. Swift 소개Keunhyun Oh
 
WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용Keunhyun Oh
 
프로그래밍 오브젝티브 C 2.0 (5/E) - 8장 상속
프로그래밍 오브젝티브 C  2.0 (5/E) -  8장 상속프로그래밍 오브젝티브 C  2.0 (5/E) -  8장 상속
프로그래밍 오브젝티브 C 2.0 (5/E) - 8장 상속Keunhyun Oh
 
연관도 분석을 이용한 데이터마이닝
연관도 분석을 이용한 데이터마이닝연관도 분석을 이용한 데이터마이닝
연관도 분석을 이용한 데이터마이닝Keunhyun Oh
 
게임 AI를 통해 본 인공지능 기본 개념
게임 AI를 통해 본 인공지능 기본 개념게임 AI를 통해 본 인공지능 기본 개념
게임 AI를 통해 본 인공지능 기본 개념Keunhyun Oh
 
Doing data science chap11
Doing data science chap11Doing data science chap11
Doing data science chap11Keunhyun Oh
 
Doing data science chap4
Doing data science chap4Doing data science chap4
Doing data science chap4Keunhyun Oh
 

More from Keunhyun Oh (8)

Mastering Python chapter3
Mastering Python chapter3Mastering Python chapter3
Mastering Python chapter3
 
[SwiftStudy 2016] 1장. Swift 소개
[SwiftStudy 2016] 1장. Swift 소개[SwiftStudy 2016] 1장. Swift 소개
[SwiftStudy 2016] 1장. Swift 소개
 
WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용
 
프로그래밍 오브젝티브 C 2.0 (5/E) - 8장 상속
프로그래밍 오브젝티브 C  2.0 (5/E) -  8장 상속프로그래밍 오브젝티브 C  2.0 (5/E) -  8장 상속
프로그래밍 오브젝티브 C 2.0 (5/E) - 8장 상속
 
연관도 분석을 이용한 데이터마이닝
연관도 분석을 이용한 데이터마이닝연관도 분석을 이용한 데이터마이닝
연관도 분석을 이용한 데이터마이닝
 
게임 AI를 통해 본 인공지능 기본 개념
게임 AI를 통해 본 인공지능 기본 개념게임 AI를 통해 본 인공지능 기본 개념
게임 AI를 통해 본 인공지능 기본 개념
 
Doing data science chap11
Doing data science chap11Doing data science chap11
Doing data science chap11
 
Doing data science chap4
Doing data science chap4Doing data science chap4
Doing data science chap4
 

[SwiftStudy 2016] 2장. Swift 타입 파트 1

  • 1. Swift 타입 파트 1 오근현 소프트웨어 엔지니어 #Go To Swift 162번째 시간
  • 2. 학습목표 • Swift의 타입에 대한 특징을 이해할 수 있다. • Value-Type에 대해 이해할 수 있다. • optionals 에 대해 이해할 수 있다.
  • 3. 변수/상수 선언 • 변수 • 상수 • 명료한 타입은 선언 시 삭제 가능 타입 값변수명 타입 값변수명
  • 4. 타입 분류 • named types • classes, structures, enumerations, and protocols • arrays, dictionaries, and option values • compound types: function types and tuple types
  • 5. 타입 특징 • 강한 타입 • Value-Type (물론 reference type도 있음)
  • 6. 강한 타입 • 타입을 엄격하게 준수함 • 약한 타입 언어? python, javascript, C, C++, Objective-C … • 예제: C 언어에서 아래와 같이 사용하는 것이 유효함 • char c; • int i = c; • 약한 타입 언어는 명확하지 않은 코드를 만들어냄
  • 7. Value-Type • NSString 변수를 파라메터로 넘기거나 다른 변수에 할당하면 reference count가 증가 • String 변수를 파라메터로 넘기거나 다른 변수에 할당하면 아예 새로운 변수가 할당되고 값을 메모리를 복사 (String의 내부 데이터는 reference count로 관리함. 지금 얘기하면 헷갈릴테니 이건 “Swift 성능의 이해”에서..) • NSString은 reference type, String은 value type • value type은 할당할 때, 값 자체를 복사하여 source 변수와 target 변수 사이의 연관성이 없음
  • 8. Value-Type 동기 • Local Reasoning • 코드는 관련 영역만 보았을때, 이해가 되어야함 • Reference-Type을 사용하였을 경우, 함수 호출 후나 다른 쓰레드 등에서 변 수의 값이 변경될 수도 있음 ==> 코드를 확인할 때 이런 부분들도 같이 확 인해야함 • Performance • Reference-Type에서 타입을 생성할때 힙에 할당하는데 힙에 할당하는 비용 이 Stack에 할당하는 비용에 비해 훨씬 큼 • Reference-Type에서 다른 함수의 파라메터로 변수를 전달하는 등을 수행할 때 reference count를 관리하는데 이 때 비용이 많이듦 • 자세한 것은 “Swift 성능의 이해”에서….
  • 11. optionals(계속) • 값이 있는지 없는지를 나타내는 타입 유형 • 상자가 있고 상자 안이 비워져 있는지, 상자 안에 값이 있는지 를 나타냄 • 값이 비워져 있으면 nil, 채워져 있으면 nil이 아님 • C/C++의 포인터와 유사하지만 다른 개념. 메모리 주사가 아니라 값이 있고 없고의 구분임 타입 뒤에 물음표를 붙여서 표기
  • 12. optionals는 왜 있나? • API의 성공 실패를 나타내기 위한 무수히 많은 반환값들… • NULL, error code, BOOL, NSNotFound, -1… 등등 • API 마다 반환 값을 알아야함. 구현도 어렵고 실수하기도 쉽 고 가독성도 떨어짐 • API에서 어떤 값을 얻어올때 실패하면 nil, 성공하면 nil이 아 닌 값을 Type-safe하기 반환하기 위해 optionals를 사용
  • 13. optionals 예제 number 1 is not nil 만 출력
  • 14. unwrapping • 상자 속에서 값을 꺼내오기 위해 unwrapping(까보기)함 • nil이 아닌 optional 뒤에 !(느낌표)를 붙여서 값을 얻어올 수 있음
  • 15. optional binding 1: if-let • optionals의 문제점? unwrapping을 해야하는 귀찮음 • if let “타입” = “옵셔널 타입” {} • optional type이 nil이면 if문 조건에 들어가지 않음 • optional type이 nil이 아니면 타입에 unwrapping된 값이 할당 됨
  • 16. optional binding 1: if-let(계속)
  • 17. optional binding 1: if-let(계속) • if문은 프로그램에서 조건에 따른 논리 분기를 위해 사용 • 오류를 처리하기엔 몇가지 불편함이 있음 • 계속 계속 depth가 깊어지면서 구현의 어려움과 가독성 저하 를 가져옴 • 오류를 처리하기 위한 if문인지 논리의 분기를 위한 if문인 지 가독성의 문제가 있음
  • 18. optional binding 2: guard-let • if를 대신해서 오류를 분류하기 위한 guard 구문 추가 • else가 반드시 있어야함 • return 또는 break(순환문내에서 쓰일 경우)가 반드시 있어야함 • 물론, if문 처럼 optional binding에만 쓰이지는 않음 • guard문에서 unwrapping된 값은 guard문 바깥에서도 사용 가능
  • 19. optional binding 2: guard-let(계속) unwrapping된 값은 guard문 밖에서도 유효함
  • 20. optional chaining • optionals를 연속하여 사용 가능 • 위의 chaining 중 하나라도 nil이면 nil이 반환되어 if문에 들 어가지 못함 • optionals를 간편하게 사용하기 위한 방법
  • 21. Implicitly unwrapped optionals • optionals의 값을 받긴 하지만 nil이 아닌 것을 내가 알고 있음 • 굳이 번거롭게 매번 unwrapping해서 사용해야하나? • Implicitly unwrapped을 사용하여 직접 값에 접근 가능 • 제일 대표적으로 볼 수 있는 예제가 interface builder를 통해 생성한 @IBOutlet 변수 ==> nil이 되면 안되고, nil이 되지 않을 것을 확신 • 사용할 땐 아래와 같이 편하게(!) 사용하면됨 • 해당 값이 nil이 되면 오류가 발생 • 귀차니즘으로 인한 unwrapping의 남발은 가독성과 안정성에 좋지 않을 수 도 있음!
  • 22. ?? Operation • optional의 값을 얻어 변수를 할당할 때, ?? 연산자를 통해 할당 하 려는 값이 nil인 경우의 default값을 넣어줄 수 있음 • optional value ?? default value • optional value가 nil이 아니면 optional 안에 있는 값이 할당되고 optional이 nil이면 default value가 할당