SlideShare a Scribd company logo
1 of 66
let swift(16)
Protocol Oriented
Programming
POP in Swift
조성규
Contents
Protocol Oriented Programming Overview
POP & Value in Project
Model, View, Controller with POP & Value
Advantage
Limitation
Summary
Protocol Oriented Programming
Protocol in Objective-C
단지 기능의 청사진의 역할을 수행
주로 Delegate, DataSource 등으로 이용
기본 구현 (Default Implementation) 불가
카테고리 적용 불가
Protocol in Swift
Objective-C의 프로토콜 기능은 기본
기본 구현(Default Implementation) 가능
Protocol + Extension = Protocol extension
특정 타입이 할 일 지정 + 구현을 한 방에!
Protocol extension
protocol LayoutDrawable {
func drawSomeLayout()
}
class MyView: UIView, LayoutDrawable {
func drawSomeLayout() {
// Draw some layout...
}
}
Protocol extension
protocol LayoutDrawable {
func drawSomeLayout()
}
extension LayoutDrawable {
}
class MyView: UIView, LayoutDrawable {
func drawSomeLayout() {
// Draw some layout...
}
}
Protocol extension
protocol LayoutDrawable {
func drawSomeLayout()
}
extension LayoutDrawable {
func drawSomeLayout() {
// Draw some layout...
}
}
class MyView: UIView, LayoutDrawable {
}
Protocol 

Default Implimentation
Protocol extension
protocol LayoutDrawable {
func drawSomeLayout()
}
extension LayoutDrawable {
func drawSomeLayout() {
// Draw some layout...
}
}
extension UIView: LayoutDrawable { }
extension SKNode: LayoutDrawable { }
Idea from…
상속의 한계
서로 다른 클래스에서 상속받은 클래스는 동일한 기능
을

구현하기 위해 중복코드 발생
카테고리의 한계 및 부작용
프로퍼티 추가 불가
오직 클래스에만 적용 가능
기존 메서드를 (자신도 모르게) 오버라이드 가능
Protocol 

Default Implimentation
Idea from…
참조타입의 한계
동적 할당과 참조 카운팅에 많은 자원 소모
Using Value Type
class
Person
struct
Turtle
struct
Frog
class
Bird
struct
Fish
protocol
Runable
protocol
Flyable
protocol
Swimable
protocol
Talkable
class
Person
struct
Turtle
struct
Frog
class
Bird
struct
Fish
protocol
Runable
protocol
Flyable
protocol
Swimable
protocol
Talkable
protocol
Runable
protocol
Swimable
protocol
Swimable
protocol
Swimable
class
Person
struct
Turtle
struct
Frog
class
Bird
struct
Fish
protocol
Runable
protocol
Flyable
protocol
Swimable
protocol
Talkable
protocol
Runable
protocol
Swimable
protocol
Swimable
protocol
Swimable
Default Implimentation
(Extension)
여기까지…
Protocol-Oriented Programming in Swift
(#WWDC15, 408)
So WHAT??
어떻게 써먹으라고?
“POP 그것이 알고싶다”
지금부터 시작합니다!
POP & Value in Project
Social Networking Service
POP & Value in Project
Social Networking Service
Social Media
타임라인을 나타낼 수 있는 테이블 뷰 컨트롤러를 구성해 봅니다
“테이블 뷰 형식의 타임라인이 필요해요”
Protocol Oriented Programming in Swift
Protocol Oriented Programming in Swift
class TimelineTableViewCell: UITableViewCell {
var mediaImageView: UIImageView
var note: UILabel
var content: NSDictionary
}
class TimelineTableViewController: UITableViewController {
var contents: [NSDictionary]
}
class DetailViewController: UIViewController {
var mediaImageView: UIImageView
var note: UILabel
var content: NSDictionary
}
“성규씨, 정말 간단한 기능이 더 필요해요”
사진첩 처럼 볼 수 있는 모드를 추가할 수 있을까요?
“성규씨, 정말 간단한 기능이 더 필요해요”
사진첩 처럼 볼 수 있는 모드를 추가할 수 있을까요?
……………………
어찌 합니까
어떻게 할까요
무엇부터?
Model with POP & Value
Table View Cell











Collection View Cell
Content Model
class Content {
var URLString: String
var note: String
}
struct Content {
var URLString: String
var note: String
}
Model Property
class TimelineTableViewController: UITableViewController {
var contents: [Content]
// …
}
class TimelineCollectionViewController: UITableViewController {
var contents: [Content]
// …
}
Model Property
class TimelineTableViewController: UITableViewController,
ContainContents {
var contents: [Content]
// …
}
class TimelineCollectionViewController: UITableViewController ,
ContainContents {
var contents: [Content]
// …
}
protocol ContainContents {
var contents: [Content] { get }
}
Model Property
class TimelineTableViewController: UITableViewController,
ContainContents { … }
class TimelineCollectionViewController: UITableViewController,
ContainContents { … }
protocol ContainContents {
var contents: [Content] { get }
}
class TimelineContentObject {
static let shared = TimelineContentObject()
var contents: [Content] = [Content]()
}
extension ContainContents {
var contents: [Content] {
return TimelineContentObject.shared.contents
}
}
View with POP & Value
Table View Cell











Collection View Cell

Detail View Controller’s view
View
protocol MediaContainer: class {
var content: Content? { get set }
var media: UIImageView { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
View
class TimelineTableViewCell: UITableViewCell,
MediaContainer {
var media: UIImageView
var note: UILabel
var content: Content? {
didSet {
contentChanged()
}
}
}
class TimelineCollectionViewCell: UICollectionViewCell,
MediaContainer {
var media: UIImageView
var note: UILabel
var content: Content? {
didSet {
contentChanged()
}
}
}
View
class DetailViewController: UIViewController,
MediaContainer {
var media: UIImageView
var note: UILabel
var content: Content? {
didSet {
contentChanged()
}
}
}
Protocol Oriented Programming in Swift
Controller with POP & Value
Controller
protocol CanShowDetailView {
func showDetailView(withContent content: Content)
var navigationController: UINavigationController? { get }
}
extension CanShowDetailView {
func showDetailView(withContent content: Content) {
// Show detail view...
}
}
Controller
class TimelineTableViewController: UITableViewController,
ContainContents, CanShowDetailView {
…
}
class TimelineCollectionViewController: UITableViewController,
ContainContents, CanShowDetailView {
}
Protocol Oriented Programming in Swift
“이건 진짜 간단한건데요!!”
사진 말고 영상도 보여줄 수 없을까요?
“이건 진짜 간단한건데요!!”
사진 말고 영상도 보여줄 수 없을까요?
……………………
Refactoring
Table View Cell











Collection View Cell

Detail View Controller’s view
Image or Video
Protocol
protocol MediaContainer: class {
var content: Content? { get set }
var media: UIImageView { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
Protocol
protocol ContentPresentable: class, Layout {
var frame: CGRect { get set }
var canPresentContent: Bool { get }
}
extension ContentPresentable {
var canPresentContent: Bool {
return true
}
}
extension UIImageView: ContentPresentable { }
extension AVPlayerLayer: ContentPresentable { }
Protocol / Model
protocol MediaContainer: class {
var content: Content? { get set }
var media: UIImageView { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
struct Content {
var URLString: String
var note: String
}
Protocol / Model
protocol MediaContainer: class {
var content: Content? { get set }
var media: ContentPresentable { get }
var note: UILabel { get set }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
struct Content {
enum MediaType {
case image, video
}
var type: Content.MediaType
var URLString: String
var note: String
}
Protocol / Model
protocol MediaContainer: class {
var content: Content? { get set }
var media: ContentPresentable { get }
var note: UILabel { get set }
var videoLayer: AVPlayerLayer { get }
var mediaImageView: UIImageView { get }
func contentChanged()
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
struct Content {
enum MediaType {
case image, video
}
var type: Content.MediaType
var URLString: String
var note: String
}
Protocol
extension MediaContainer {
func contentChanged() {
// Update view...
}
}
extension MediaContainer {
func contentChanged() {
// Update view...
}
var media: ContentPresentable {
switch content!.type {
case .image:
return mediaImageView
case .video:
return videoLayer
}
}
}
Protocol Oriented Programming in Swift
Advantage
Advantage
범용적인 사용
클래스, 구조체, 열거형 등등 모든 타입에 적용 가능
제네릭과 결합하면 더욱 파급적인 효과

(Type safe & Flexible code)
Advantage
상속의 한계 극복
특정 상속 체계에 종속되지 않음
프레임워크에 종속적이지 않게 재활용 가능
Advantage
적은 시스템 비용
Reference type cost > Value type cost
용이한 테스트
GUI 코드 없이도 수월한 테스트
Limitation
Limitation
Objective-C Protocol

+ 

Swift Extenstion



Default
Implimentation≠
자주 사용되는 Delegate, DataSource 등
프레임워크 프로토콜에 기본구현 불가
Limitation
extension UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.endEditing(true)
return true
}
}
extension UITableViewDelegate {
func tableView(tableView: UITableView, didSelectRowAtIndexPath
indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
}
이것이 안되면 

정녕 무슨 소용이란 말입니까…
OTL
Summary
Summary
Value Type을 사용하여 성능상의 이득을 취하자
Protocol + Extension + Generic은 환상의 조합
이다
이제 상속을 통한 수직 확장이 아닌

Protocol과 Extension을 통한 수평 확장과

기능추가를 고민해 볼 때…
Reference
Protocol-Oriented Programming in Swift
(#WWDC15, 408)
Building Better Apps with Value Types in Swift
(#WWDC15, 414)
Protocol and Value Oriented Programming in
UIKit Apps (#WWDC16, 419)
LET’SWIFT 2016 Session

: 스위프트 퍼포먼스 이해하기 - 유용하 님
Protocol Oriented Programming in Swift
let swift(16)

More Related Content

What's hot

Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개beom kyun choi
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린Park JoongSoo
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍NAVER D2
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)NAVER D2
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)Yongha Yoo
 
EcmaScript6(2015) Overview
EcmaScript6(2015) OverviewEcmaScript6(2015) Overview
EcmaScript6(2015) Overviewyongwoo Jeon
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅NAVER D2
 
안드로이드 설계코드 노하우 및 개발방법
안드로이드 설계코드 노하우 및 개발방법안드로이드 설계코드 노하우 및 개발방법
안드로이드 설계코드 노하우 및 개발방법mosaicnet
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GDG Korea
 

What's hot (20)

Dependency Injection 소개
Dependency Injection 소개Dependency Injection 소개
Dependency Injection 소개
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린
 
[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍[1B4]안드로이드 동시성_프로그래밍
[1B4]안드로이드 동시성_프로그래밍
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
 
EcmaScript6(2015) Overview
EcmaScript6(2015) OverviewEcmaScript6(2015) Overview
EcmaScript6(2015) Overview
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅[D2 오픈세미나]5.robolectric 안드로이드 테스팅
[D2 오픈세미나]5.robolectric 안드로이드 테스팅
 
안드로이드 설계코드 노하우 및 개발방법
안드로이드 설계코드 노하우 및 개발방법안드로이드 설계코드 노하우 및 개발방법
안드로이드 설계코드 노하우 및 개발방법
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
iOS 메모리관리
iOS 메모리관리iOS 메모리관리
iOS 메모리관리
 
Redux
ReduxRedux
Redux
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
 

Viewers also liked

Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)Mike JS Choi
 
Swift and Xcode8
Swift and Xcode8Swift and Xcode8
Swift and Xcode8Hyuk Hur
 
Swift package manager
Swift package managerSwift package manager
Swift package manager성관 윤
 
Letswift Swift 3.0
Letswift Swift 3.0Letswift Swift 3.0
Letswift Swift 3.0Sehyun Park
 
Swift server-side-let swift2016
Swift server-side-let swift2016Swift server-side-let swift2016
Swift server-side-let swift2016Eric Ahn
 
Swift internals
Swift internalsSwift internals
Swift internalsJung Kim
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기Wanbok Choi
 

Viewers also liked (7)

Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)Protocol 잘 쓰기 (let us: Go! Summer 2017)
Protocol 잘 쓰기 (let us: Go! Summer 2017)
 
Swift and Xcode8
Swift and Xcode8Swift and Xcode8
Swift and Xcode8
 
Swift package manager
Swift package managerSwift package manager
Swift package manager
 
Letswift Swift 3.0
Letswift Swift 3.0Letswift Swift 3.0
Letswift Swift 3.0
 
Swift server-side-let swift2016
Swift server-side-let swift2016Swift server-side-let swift2016
Swift server-side-let swift2016
 
Swift internals
Swift internalsSwift internals
Swift internals
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
 

Similar to Protocol Oriented Programming in Swift

HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.Hojin Jun
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게Sungju Jin
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계Chiwon Song
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍NAVER D2
 
10장 아이패드에 대한 고려사항
10장 아이패드에 대한 고려사항10장 아이패드에 대한 고려사항
10장 아이패드에 대한 고려사항Jihoon Kong
 
Youtube를활용한app만들기
Youtube를활용한app만들기Youtube를활용한app만들기
Youtube를활용한app만들기DaeHee Jang
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modulesJay Kim
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사Rjs Ryu
 
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디Youngbin Han
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트Keesun Baik
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 

Similar to Protocol Oriented Programming in Swift (20)

Coded ui가이드
Coded ui가이드Coded ui가이드
Coded ui가이드
 
HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
Eclipse RCP 1/2
Eclipse RCP 1/2Eclipse RCP 1/2
Eclipse RCP 1/2
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
20201121 코드 삼분지계
20201121 코드 삼분지계20201121 코드 삼분지계
20201121 코드 삼분지계
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
 
[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍
 
10장 아이패드에 대한 고려사항
10장 아이패드에 대한 고려사항10장 아이패드에 대한 고려사항
10장 아이패드에 대한 고려사항
 
Youtube를활용한app만들기
Youtube를활용한app만들기Youtube를활용한app만들기
Youtube를활용한app만들기
 
V8 add on with middleware modules
V8 add on with middleware modulesV8 add on with middleware modules
V8 add on with middleware modules
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
1.Create Project Sunshine - 시온고등학교 안드로이드 스터디
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
Design patterns
Design patternsDesign patterns
Design patterns
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 

Protocol Oriented Programming in Swift