SlideShare a Scribd company logo
1 of 12
17. Swift 튜토리얼
- 프로토콜
창원대학교 정보통신공학과 박동규
2016. 2.
프로토콜이란
• C++의 추상클래스는 객체를 생성하는 용도가 아
니라 상속을 통해서 물려받은 클래스가 반드시 가
져야 할 프로퍼티와 메소드를 정의하는 용도임
• 자바의 인터페이스 역시 인터페이스를 implement
한 클래스가 반드시 구현해야 할 메소드를 가지고
있다
• 특정 객체가 갖추어야 할 기능이나 속성에 대한
설계도이다
프로토콜
• 실질적인 내용은 없는 프로퍼티나 메소드의 단순
선언문
• 이 프로토콜을 이용하는 객체에서 내용을 정의함
• 프로토콜에 선언된 프로퍼티나 메소드를 프로토
콜의 ‘명세(specification)’이라 한다
• 클래스는 선언시 :(colon) 문뒤에 구현해야 할 프
로토콜을 적어줌
프로토콜 선언과 구현
프로토콜
프로토콜은 구현해야 할 내용의 명세서이므로
구현하지 않으면 오류발생
초기화 구문
• 초기화 구문 역시 프로토콜에서 작성할 수 있다
• 메소드와 마찬가지로 실행블록을 작성하지 않
음
• 매개변수 타입뿐만 아니라 반드시 매개변수명
까지 일치해야 한다
• 클래스에서 초기화구문을 구현할 때는 required
키워드를 붙여야 한다
초기화 구문
class에서 init()을 구현할 경우 required 키워드 사용
다중 상속
• Swift는 다중상속을 허용하지 않는다
프로토콜
• 클래스는 다중상속은 허용하지 않지만 상속과 프로토콜
구현을 동시에 선언할 수 있다
• 상속과 프로토콜에서 동시에 init() 이 있을 경우
overide required를 키워드를 동시에 추가한다
확장구문
• 클래스를 이미 구현한 후에 수정할 필요가 생겼다
• 클래스 코드를 수정하면 되지만, extension을
통해서 클래스를 확장시키는 방법도 있다
• 확장 구문에서 프로토콜을 구현한다면 이후로
해당 클래스는 프로토콜을 구현한 것으로 처리
된다
• 기존 클래스를 수정하지 않아도 된다는 장점이
있음
예제
감사합니다
dongupak@gmail.com

More Related Content

What's hot

Spring di chapter2
Spring di chapter2Spring di chapter2
Spring di chapter2흥래 김
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2현찬 양
 
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼Sanghoon Yoon
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1연우 김
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3현찬 양
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리Injae Lee
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리연우 김
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍QooJuice
 
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
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니Dong Chan Shin
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 

What's hot (20)

Spring di chapter2
Spring di chapter2Spring di chapter2
Spring di chapter2
 
Java 기초
Java 기초Java 기초
Java 기초
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
Effective C++ Chaper 1
Effective C++ Chaper 1Effective C++ Chaper 1
Effective C++ Chaper 1
 
More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
5 6 1
5 6 15 6 1
5 6 1
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리Effective c++ 챕터 2 정리
Effective c++ 챕터 2 정리
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
함수형 프로그래밍
함수형 프로그래밍함수형 프로그래밍
함수형 프로그래밍
 
Java inner class
Java inner classJava inner class
Java inner class
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니C++ try catch 어디까지 가봤니
C++ try catch 어디까지 가봤니
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 

Similar to 17 swift 프로토콜

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
 
11장 시스템
11장 시스템11장 시스템
11장 시스템kidoki
 
[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTWAnselmKim
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계AnselmKim
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DIAnselmKim
 
Swift protocols
Swift protocolsSwift protocols
Swift protocolswileychoi
 
Apex Trigger를 위한 OOP 기초
Apex Trigger를 위한 OOP 기초Apex Trigger를 위한 OOP 기초
Apex Trigger를 위한 OOP 기초JaewonLee153
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOPAnselmKim
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Woojin Joe
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)양 한빛
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 

Similar to 17 swift 프로토콜 (20)

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
11장 시스템
11장 시스템11장 시스템
11장 시스템
 
[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI[스프링 스터디 2일차] IoC 컨테이너와 DI
[스프링 스터디 2일차] IoC 컨테이너와 DI
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Swift protocols
Swift protocolsSwift protocols
Swift protocols
 
Apex Trigger를 위한 OOP 기초
Apex Trigger를 위한 OOP 기초Apex Trigger를 위한 OOP 기초
Apex Trigger를 위한 OOP 기초
 
I os 2
I os 2I os 2
I os 2
 
Annotation
AnnotationAnnotation
Annotation
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
 
Kotlin
KotlinKotlin
Kotlin
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 

More from Changwon National University

생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdf생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdfChangwon National University
 
알아두면 편리한 macOS 에디터 단축키와 기능
알아두면 편리한 macOS 에디터  단축키와 기능알아두면 편리한 macOS 에디터  단축키와 기능
알아두면 편리한 macOS 에디터 단축키와 기능Changwon National University
 
키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)Changwon National University
 
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)Changwon National University
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리Changwon National University
 
15 2 클래스정의와self
15 2 클래스정의와self15 2 클래스정의와self
15 2 클래스정의와selfChangwon National University
 

More from Changwon National University (20)

생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdf생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdf
 
2011 app center Changwon National Univ.
2011 app center Changwon National Univ.2011 app center Changwon National Univ.
2011 app center Changwon National Univ.
 
인공지능의 파도가 온다
인공지능의 파도가 온다인공지능의 파도가 온다
인공지능의 파도가 온다
 
Mobile Healthcare Application
Mobile Healthcare ApplicationMobile Healthcare Application
Mobile Healthcare Application
 
바다 즐기기
바다 즐기기바다 즐기기
바다 즐기기
 
알아두면 편리한 macOS 에디터 단축키와 기능
알아두면 편리한 macOS 에디터  단축키와 기능알아두면 편리한 macOS 에디터  단축키와 기능
알아두면 편리한 macOS 에디터 단축키와 기능
 
키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)
 
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
 
20 2 강의를 마치며
20 2 강의를 마치며20 2 강의를 마치며
20 2 강의를 마치며
 
20 1 코딩스타일
20 1 코딩스타일20 1 코딩스타일
20 1 코딩스타일
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리
 
18 1 파이썬패키지
18 1 파이썬패키지18 1 파이썬패키지
18 1 파이썬패키지
 
17 2 필터함수와 맵함수
17 2 필터함수와 맵함수17 2 필터함수와 맵함수
17 2 필터함수와 맵함수
 
17 1 람다함수
17 1 람다함수17 1 람다함수
17 1 람다함수
 
16 1 상속과super()
16 1 상속과super()16 1 상속과super()
16 1 상속과super()
 
15 2 클래스정의와self
15 2 클래스정의와self15 2 클래스정의와self
15 2 클래스정의와self
 
14 4 슬라이싱
14 4 슬라이싱14 4 슬라이싱
14 4 슬라이싱
 
14 2 iterator
14 2 iterator14 2 iterator
14 2 iterator
 
14 3 리스트함수
14 3 리스트함수14 3 리스트함수
14 3 리스트함수
 
14 1 리스트의 메소드
14 1 리스트의 메소드14 1 리스트의 메소드
14 1 리스트의 메소드
 

17 swift 프로토콜

  • 1. 17. Swift 튜토리얼 - 프로토콜 창원대학교 정보통신공학과 박동규 2016. 2.
  • 2. 프로토콜이란 • C++의 추상클래스는 객체를 생성하는 용도가 아 니라 상속을 통해서 물려받은 클래스가 반드시 가 져야 할 프로퍼티와 메소드를 정의하는 용도임 • 자바의 인터페이스 역시 인터페이스를 implement 한 클래스가 반드시 구현해야 할 메소드를 가지고 있다 • 특정 객체가 갖추어야 할 기능이나 속성에 대한 설계도이다
  • 3. 프로토콜 • 실질적인 내용은 없는 프로퍼티나 메소드의 단순 선언문 • 이 프로토콜을 이용하는 객체에서 내용을 정의함 • 프로토콜에 선언된 프로퍼티나 메소드를 프로토 콜의 ‘명세(specification)’이라 한다 • 클래스는 선언시 :(colon) 문뒤에 구현해야 할 프 로토콜을 적어줌
  • 5. 프로토콜 프로토콜은 구현해야 할 내용의 명세서이므로 구현하지 않으면 오류발생
  • 6. 초기화 구문 • 초기화 구문 역시 프로토콜에서 작성할 수 있다 • 메소드와 마찬가지로 실행블록을 작성하지 않 음 • 매개변수 타입뿐만 아니라 반드시 매개변수명 까지 일치해야 한다 • 클래스에서 초기화구문을 구현할 때는 required 키워드를 붙여야 한다
  • 7. 초기화 구문 class에서 init()을 구현할 경우 required 키워드 사용
  • 8. 다중 상속 • Swift는 다중상속을 허용하지 않는다
  • 9. 프로토콜 • 클래스는 다중상속은 허용하지 않지만 상속과 프로토콜 구현을 동시에 선언할 수 있다 • 상속과 프로토콜에서 동시에 init() 이 있을 경우 overide required를 키워드를 동시에 추가한다
  • 10. 확장구문 • 클래스를 이미 구현한 후에 수정할 필요가 생겼다 • 클래스 코드를 수정하면 되지만, extension을 통해서 클래스를 확장시키는 방법도 있다 • 확장 구문에서 프로토콜을 구현한다면 이후로 해당 클래스는 프로토콜을 구현한 것으로 처리 된다 • 기존 클래스를 수정하지 않아도 된다는 장점이 있음