Swift의 Protocol에는, 감동이 있다.
protocol을 활용해 코드를 조립해보자, 레고처럼
2022.10.20
작성자 : 오승민
1. 재료 살펴보기
1.1 Protocol 이란?
1.2 POP 란?
2. 찍어 먹어 보기
2.1 익숙한 예제를 통해서 맛보기.
2.2 간단한 문제 상황 해결해 보기.
3. 맛집 구경하기
3.1 Apple에서 소개한 활용 방법 구경하기.
3.1 TOSS에서 활용한 방법 구경하기.
4. 더 생각해 보기
4.1 Protocol의 성능 간단히 알아보기.
4.2 주의해야 할 점 생각해 보기.
2
CHAPTER 1.
재료 살펴보기
Protocol과 POP에 대해서 알아봅시다.
ⓒ NAVER Connect Foundation 4
1.1 Protocol 이란?
01 02 03
모든 타입에 적용 가능
Class와는 다르게 Struct, Enum, Protocol등 모든
타입에 채택/상속이 가능하다.
다중 채택/상속 가능
Class와는 다르게 한 번에 여러개의 Protocol을
채택/상속할 수 있다.
default implementation 구현
가능
protocol을 상속/채택한 모든 타입에 같은 구현
을 제공할 수 있다.
프로토콜이란 메서드, 프로퍼티, 다른 필수요소들을 정의한 것. 청사진.
ⓒ NAVER Connect Foundation 5
1.2 POP 란?
# Protocol Oriented Programming
한마디로
Flexible, Reusable
• 한번 만든 Protocol을 모든 타입에 적용이 가능함.
• extension을 통해 채택이 가능하여 무한한 확장성을 지님.
• 다중 상속/채택이 가능하여 Protocol을 여러 곳에서 재활용 가능.
• associatedtype을 통해 Generic한 구조를 만들 수 있음.
• default implementation을 통해 반복되는 코드를 줄일 수 있습니다.
https://developer.apple.com/documentation/foundation/nscoding
ⓒ NAVER Connect Foundation 6
1.2 POP 란?
POP를 적극적으로 활용하는 Apple
CHAPTER 2.
찍어 먹어 보기
Protocol을 활용한 몇 가지 예시들을 살펴봅시다.
ⓒ NAVER Connect Foundation 8
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
크기 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 9
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
크기 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 10
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
공통적인 기능을 갖는
BaseRectView BaseRectView를 상속
ⓒ NAVER Connect Foundation 11
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 12
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
colorChangable
alphaChangable
savable
ⓒ NAVER Connect Foundation 13
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 14
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 15
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 16
2.1 찍어 먹어보기 – 익숙한 예제
사각형 A 사각형 B 사각형 C 사각형 D
색 변경 O X O O
투명도 변경 O O O X
객체 저장 X O X O
ⓒ NAVER Connect Foundation 17
2.2 찍어 먹어보기 – Retroactive Modeling
CamperTableView
ⓒ NAVER Connect Foundation 18
2.2 찍어 먹어보기 – Retroactive Modeling
ReviewerTableView
ⓒ NAVER Connect Foundation 19
2.2 찍어 먹어보기 – Retroactive Modeling
같은 레이아웃,
모델에 따라 달라지는 클래스
ⓒ NAVER Connect Foundation 20
2.2 찍어 먹어보기 – Retroactive Modeling
Camper과 Reviewer를 묶어줄 수 있다면?
단, 기존 모델 코드의 변경 없이
ⓒ NAVER Connect Foundation 21
2.2 찍어 먹어보기 – Retroactive Modeling
Retroactive Modeling
ⓒ NAVER Connect Foundation 22
2.2 찍어 먹어보기 – Retroactive Modeling
Retroactive Modeling
CHAPTER 3.
맛집 구경하기
Apple에서 생각하는 활용 방법과, 실제로 잘 활용된 예시를 살펴봅시다.
ⓒ NAVER Connect Foundation 24
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 25
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 26
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
기본적인 구현
ⓒ NAVER Connect Foundation 27
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
Layout을 분리
ⓒ NAVER Connect Foundation 28
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 29
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 30
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
UITest with Code
ⓒ NAVER Connect Foundation 31
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 32
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
SpriteKit
추가적인 기능
ⓒ NAVER Connect Foundation 33
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 34
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 35
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
ⓒ NAVER Connect Foundation 36
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
heterogeneous 상태
ⓒ NAVER Connect Foundation 37
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
homogeneous 상태
ⓒ NAVER Connect Foundation 38
3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
Protocol and Value Oriented Programming in UIKit Apps WWDC 2016
ⓒ NAVER Connect Foundation 39
3.2 맛집 구경하기 - Toss Design System을 활용하는 방법
<protocol>
CellItemModelType
<class>
ListRowItemModel
<protocol>
CellItemModelBindable
<class>
ListRow
<protocol>
ContainsToggle
<protocol>
ContainsButton
<protocol>
Touchable
ⓒ NAVER Connect Foundation
40
3.2 맛집 구경하기 - Toss Design System을 활용하는 방법
<class>
ListRow
<protocol>
ContainsToggle
<protocol>
ContainsButton
<protocol>
Touchable
Toss Design System을 활용하는 방법 Slash22
CHAPTER 4.
더 생각해 보기
Protocol을 활용할 때, 더 생각해봐야 할 점들을 짚어봅시다.
ⓒ NAVER Connect Foundation 44
4.1 더 생각해 보기 - Protocol의 성능
생각보다 큰 비용이 드는 Protocol
Understanding Swift Performance -WWDC 16
ⓒ NAVER Connect Foundation 45
4.1 더 생각해 보기 - Protocol의 성능
생각보다 큰 비용이 드는 Protocol
Understanding Swift Performance WWDC 2016
ⓒ NAVER Connect Foundation 47
4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 1
default implementation
• protocol extension을 통해 구현한 것들은 override 되지 않는다.
• 즉, polymorphism이 적용되지 않기 때문에 static dispatch로 동작한다.
• 하지만, 버그 추적을 어렵게 한다.
docs.swift.org
Why you should avoid using default implementation Medium
ⓒ NAVER Connect Foundation 49
4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 2
YAGNI
You Ain’t Gonna Neet It
ⓒ NAVER Connect Foundation 50
4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 2
Understanding Swift Performance -WWDC 16
ⓒ NAVER Connect Foundation 51
4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 2
# YAGNI, Over-Engineering
하지만
항상 마음속에 새기되,
학습을 위해서는...
ⓒ NAVER Connect Foundation
End of Document
Thank You.

[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다

  • 1.
    Swift의 Protocol에는, 감동이있다. protocol을 활용해 코드를 조립해보자, 레고처럼 2022.10.20 작성자 : 오승민
  • 2.
    1. 재료 살펴보기 1.1Protocol 이란? 1.2 POP 란? 2. 찍어 먹어 보기 2.1 익숙한 예제를 통해서 맛보기. 2.2 간단한 문제 상황 해결해 보기. 3. 맛집 구경하기 3.1 Apple에서 소개한 활용 방법 구경하기. 3.1 TOSS에서 활용한 방법 구경하기. 4. 더 생각해 보기 4.1 Protocol의 성능 간단히 알아보기. 4.2 주의해야 할 점 생각해 보기. 2
  • 3.
    CHAPTER 1. 재료 살펴보기 Protocol과POP에 대해서 알아봅시다.
  • 4.
    ⓒ NAVER ConnectFoundation 4 1.1 Protocol 이란? 01 02 03 모든 타입에 적용 가능 Class와는 다르게 Struct, Enum, Protocol등 모든 타입에 채택/상속이 가능하다. 다중 채택/상속 가능 Class와는 다르게 한 번에 여러개의 Protocol을 채택/상속할 수 있다. default implementation 구현 가능 protocol을 상속/채택한 모든 타입에 같은 구현 을 제공할 수 있다. 프로토콜이란 메서드, 프로퍼티, 다른 필수요소들을 정의한 것. 청사진.
  • 5.
    ⓒ NAVER ConnectFoundation 5 1.2 POP 란? # Protocol Oriented Programming 한마디로 Flexible, Reusable • 한번 만든 Protocol을 모든 타입에 적용이 가능함. • extension을 통해 채택이 가능하여 무한한 확장성을 지님. • 다중 상속/채택이 가능하여 Protocol을 여러 곳에서 재활용 가능. • associatedtype을 통해 Generic한 구조를 만들 수 있음. • default implementation을 통해 반복되는 코드를 줄일 수 있습니다. https://developer.apple.com/documentation/foundation/nscoding
  • 6.
    ⓒ NAVER ConnectFoundation 6 1.2 POP 란? POP를 적극적으로 활용하는 Apple
  • 7.
    CHAPTER 2. 찍어 먹어보기 Protocol을 활용한 몇 가지 예시들을 살펴봅시다.
  • 8.
    ⓒ NAVER ConnectFoundation 8 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 크기 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 9.
    ⓒ NAVER ConnectFoundation 9 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 크기 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100 길이 120, 높이 100 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 10.
    ⓒ NAVER ConnectFoundation 10 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O 공통적인 기능을 갖는 BaseRectView BaseRectView를 상속
  • 11.
    ⓒ NAVER ConnectFoundation 11 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 12.
    ⓒ NAVER ConnectFoundation 12 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O colorChangable alphaChangable savable
  • 13.
    ⓒ NAVER ConnectFoundation 13 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 14.
    ⓒ NAVER ConnectFoundation 14 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 15.
    ⓒ NAVER ConnectFoundation 15 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 16.
    ⓒ NAVER ConnectFoundation 16 2.1 찍어 먹어보기 – 익숙한 예제 사각형 A 사각형 B 사각형 C 사각형 D 색 변경 O X O O 투명도 변경 O O O X 객체 저장 X O X O
  • 17.
    ⓒ NAVER ConnectFoundation 17 2.2 찍어 먹어보기 – Retroactive Modeling CamperTableView
  • 18.
    ⓒ NAVER ConnectFoundation 18 2.2 찍어 먹어보기 – Retroactive Modeling ReviewerTableView
  • 19.
    ⓒ NAVER ConnectFoundation 19 2.2 찍어 먹어보기 – Retroactive Modeling 같은 레이아웃, 모델에 따라 달라지는 클래스
  • 20.
    ⓒ NAVER ConnectFoundation 20 2.2 찍어 먹어보기 – Retroactive Modeling Camper과 Reviewer를 묶어줄 수 있다면? 단, 기존 모델 코드의 변경 없이
  • 21.
    ⓒ NAVER ConnectFoundation 21 2.2 찍어 먹어보기 – Retroactive Modeling Retroactive Modeling
  • 22.
    ⓒ NAVER ConnectFoundation 22 2.2 찍어 먹어보기 – Retroactive Modeling Retroactive Modeling
  • 23.
    CHAPTER 3. 맛집 구경하기 Apple에서생각하는 활용 방법과, 실제로 잘 활용된 예시를 살펴봅시다.
  • 24.
    ⓒ NAVER ConnectFoundation 24 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 25.
    ⓒ NAVER ConnectFoundation 25 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 26.
    ⓒ NAVER ConnectFoundation 26 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps 기본적인 구현
  • 27.
    ⓒ NAVER ConnectFoundation 27 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps Layout을 분리
  • 28.
    ⓒ NAVER ConnectFoundation 28 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 29.
    ⓒ NAVER ConnectFoundation 29 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 30.
    ⓒ NAVER ConnectFoundation 30 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps UITest with Code
  • 31.
    ⓒ NAVER ConnectFoundation 31 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 32.
    ⓒ NAVER ConnectFoundation 32 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps SpriteKit 추가적인 기능
  • 33.
    ⓒ NAVER ConnectFoundation 33 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 34.
    ⓒ NAVER ConnectFoundation 34 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 35.
    ⓒ NAVER ConnectFoundation 35 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps
  • 36.
    ⓒ NAVER ConnectFoundation 36 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps heterogeneous 상태
  • 37.
    ⓒ NAVER ConnectFoundation 37 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps homogeneous 상태
  • 38.
    ⓒ NAVER ConnectFoundation 38 3.1 맛집 구경하기 - Protocol and Value Oriented Programming in UIKit Apps Protocol and Value Oriented Programming in UIKit Apps WWDC 2016
  • 39.
    ⓒ NAVER ConnectFoundation 39 3.2 맛집 구경하기 - Toss Design System을 활용하는 방법 <protocol> CellItemModelType <class> ListRowItemModel <protocol> CellItemModelBindable <class> ListRow <protocol> ContainsToggle <protocol> ContainsButton <protocol> Touchable
  • 40.
    ⓒ NAVER ConnectFoundation 40 3.2 맛집 구경하기 - Toss Design System을 활용하는 방법 <class> ListRow <protocol> ContainsToggle <protocol> ContainsButton <protocol> Touchable Toss Design System을 활용하는 방법 Slash22
  • 41.
    CHAPTER 4. 더 생각해보기 Protocol을 활용할 때, 더 생각해봐야 할 점들을 짚어봅시다.
  • 42.
    ⓒ NAVER ConnectFoundation 44 4.1 더 생각해 보기 - Protocol의 성능 생각보다 큰 비용이 드는 Protocol Understanding Swift Performance -WWDC 16
  • 43.
    ⓒ NAVER ConnectFoundation 45 4.1 더 생각해 보기 - Protocol의 성능 생각보다 큰 비용이 드는 Protocol Understanding Swift Performance WWDC 2016
  • 44.
    ⓒ NAVER ConnectFoundation 47 4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 1 default implementation • protocol extension을 통해 구현한 것들은 override 되지 않는다. • 즉, polymorphism이 적용되지 않기 때문에 static dispatch로 동작한다. • 하지만, 버그 추적을 어렵게 한다. docs.swift.org Why you should avoid using default implementation Medium
  • 45.
    ⓒ NAVER ConnectFoundation 49 4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 2 YAGNI You Ain’t Gonna Neet It
  • 46.
    ⓒ NAVER ConnectFoundation 50 4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 2 Understanding Swift Performance -WWDC 16
  • 47.
    ⓒ NAVER ConnectFoundation 51 4.2 더 생각해 보기 – POP를 구현할 때 주의해야 할 점 2 # YAGNI, Over-Engineering 하지만 항상 마음속에 새기되, 학습을 위해서는...
  • 48.
    ⓒ NAVER ConnectFoundation End of Document Thank You.