SlideShare a Scribd company logo
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

PDF
[SwiftStudy 2016] 3장. 함수
PPTX
Effective c++ 1
PPTX
Effective c++ 4
PPTX
Effective c++ 2
PPTX
More effective c++ 1
PDF
5 6 1
PDF
More effective c++ 항목30부터
PDF
Effective c++ chapter3, 4 요약본
[SwiftStudy 2016] 3장. 함수
Effective c++ 1
Effective c++ 4
Effective c++ 2
More effective c++ 1
5 6 1
More effective c++ 항목30부터
Effective c++ chapter3, 4 요약본

What's hot (20)

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

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

PDF
Hello Swift 2/5 - Basic2
PDF
[1B1]스위프트프로그래밍언어
PDF
[Swift] Optional
PDF
Swift5 vs objective c
PPTX
Swift2
PPT
iOS 앱 개발 강의 자료 #1
PDF
Swift3 typecasting nested_type
PDF
2 swift 상수,변수,튜풀 옵셔널
PDF
Swift3 subscript inheritance initialization
PDF
[Osxdev]4.swift
PPTX
Swift 0x02 기본 연산자
PDF
2 swift 상수_변수_튜플
PDF
스위프트 성능 이해하기
PDF
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
PDF
11 swift 값타입참조타입
PDF
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
PDF
10 swift 열거형구조체클래스
PPTX
Swift3 : class and struct(+property+method)
PDF
Swift(var & let, tuple, optional binding)
PDF
Swift 3 Programming for iOS : class and structure
Hello Swift 2/5 - Basic2
[1B1]스위프트프로그래밍언어
[Swift] Optional
Swift5 vs objective c
Swift2
iOS 앱 개발 강의 자료 #1
Swift3 typecasting nested_type
2 swift 상수,변수,튜풀 옵셔널
Swift3 subscript inheritance initialization
[Osxdev]4.swift
Swift 0x02 기본 연산자
2 swift 상수_변수_튜플
스위프트 성능 이해하기
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
11 swift 값타입참조타입
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
10 swift 열거형구조체클래스
Swift3 : class and struct(+property+method)
Swift(var & let, tuple, optional binding)
Swift 3 Programming for iOS : class and structure
Ad

More from Keunhyun Oh (8)

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