SlideShare a Scribd company logo
1 of 24
Download to read offline
Function
오근현 소프트웨어 엔지니어
#Go To Swift 163번째 시간
학습목표
• 함수의 선언과 사용을 알 수 있다.
• closure를 알 수 있다.
함수 선언/정의: 생김새
나는 함수다! 파라메터명 파라메터 타입
반환값 타입
함수명
함수 호출
Arg Label파라메터함수명
반환값이 있는 함수는 return값을 받지 않으면 warning (Swift 3)
반환값을 사용하지 않을때는 명시적으로 사용하지 않음을 표기
‘_’ 는 사용하지 않는 변수 등의 이름을 위해 정의된 특별한 키워드
(이따 또 나옵니다)
함수 선언/정의: 반환 값이 없으면 반환 타입 생
략 또는 Void
함수 선언/정의: 함수 파라메터는 상수로 취급
반환값 타입
참고: Swift 2.x까지는 var 키워드를 파라메터 앞에 붙이면 함수 파라메터를 변경 가능한
변수로 사용 가능
Swift 3에서는 var 키워드 허용하지 않음
함수 선언/정의: Argument Labels
함수를 사용할때 붙는 arg1과 arg2의 정체?Argument Labels
Default Argument Label: Parameter Name
argument label을 생략하면 argument label은 파라메터 이
름과 동일
argument label을 파라메터 이름과 다르게 사용하고 싶으면,
파라메터 이름 앞에 argument Label을 적으면됨
함수를 호출할때 변경한 argument label을 붙여야함
함수 선언/정의: Argument Labels (계속)
argument label을 파라메터 이름과 다르게 사용하고 싶으면,
파라메터 이름 앞에 argument Label을 적으면됨
함수를 호출할때 변경한 argument label을 붙여야함
‘_’ 키워드를 argument label에 붙이면 함수 호출시 argument
label 생략됨
참고: Swift 2.x 버전까지는 Objective-C의 사용 습관을 이어받아 첫번째 argument
label은 암묵적으로 생략됨.
함수 선언/정의: Argument Labels (계속)
• Argument Labels을 통해 얻을 수 있는 이점? 명료함과 가독성을
높일 수 있음
• Argument Labels 수정을 통해 얻을 수 있는 이점? 문장처럼 함수
설계 가능
• 예를 들어,
함수 선언/정의: 튜플 타입 반환
튜플타입을 이용하여 여러 값을 반환 가능
함수 선언/정의: 함수 타입
• 함수에도 타입이 있음
• 예를 들어, 아래 함수의 타입은 (Int, Int)->Int
• 함수에도 타입이 있기에 함수도 함수의 파라메터와 반환 값으로
사용 가능
함수 선언/정의: 함수 타입 파라메터 예시
함수 타입 파라메터
함수를 파라메터로 넘김
함수 선언/정의: 함수 타입
함수 타입 반환
반환 받은 함수를 사용
Nested functions
• 함수 안에 함수 사용 가능
• 함수도 class와 struct 와 같은 타입
• 함수 안에 함수는 부모 함수의 변수를 참조 가능 (마치, class와
struct의 멤버 변수처럼)
함수 안에 함수 사
용 가능
Closures
• Clousure 지원
• Clousures? self-contained blocks of functionality that can be
passed around and used in your code
• 프로그램 상 전달 가능한 코드 블럭
• 함수도 Clousures의 종류 ==> 그러니까 앞에서 말한 함수에 대한
특징들이 적용됨
• 실제 Cocoa/Cocoa Touch API 사용시 Clousures를 많이 사용하게
됨
Closures 사용 예시
소박하게 아까 배운 대로 전역 함수를 파라메터로 넘기는 것 부
터 시작…
Closures 사용 예시 (계속)
함수 네이밍을 없애고 직접 적음. 모양새가 closure 같
아짐?!
in 이후부터 body
시작
Closures 사용 예시 (계속)
입력 파라메터 함수 타입이 명확하기 때문에 closure의 반환 타입 추론가능
==> 생략가능
Closures 사용 예시 (계속)
single-expression closure의 경우 어차피 한줄 적은게 반환되는 값임
==> return 키워드 생략가능
Closures 사용 예시 (계속)
파라메터는 2개이고 각 파라메터의 타입도 어차피 알고 있음.
==> in 키워드와 파라메터 네이밍 선언 부분 생략 가능
Closures 사용 예시 (계속)
2개의 값을 비교하는 경우에는 굳이 파라메터를 내부에서 구별할 필요도 없음
==> operation만 명시 가능
Closures 사용 예시 (계속)
Closures 사용 예시 (계속)
코드 줄이는건 신났는데…
closure 내의 코드 량이 많으면 어떡함?
Trailing closures
• closure의 코드 량이 많아지면 함수 선언이 복잡해짐. 끝을 따라가
기 힘듦
• closure 파라메터가 함수의 마지막 파라메터로 오는 경우, 함수 선
언을 모두 마친 이후에 기재 가능
• 예를 들어,
예전 버전. 이것보다 선언이 명확하고 깔
끔해짐

More Related Content

What's hot

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3현찬 양
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Dong Chan Shin
 
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
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부quxn6
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디quxn6
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2세빈 정
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 pptInjae Lee
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성흥래 김
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2Injae Lee
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6Injae Lee
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
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
 

What's hot (20)

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
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
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
이펙티브 C++ 공부
이펙티브 C++ 공부이펙티브 C++ 공부
이펙티브 C++ 공부
 
이펙티브 C++ 스터디
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
Java generics
Java genericsJava generics
Java generics
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
1 2 1
1 2 11 2 1
1 2 1
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
More effective c++ Chap1~2
More effective c++ Chap1~2More effective c++ Chap1~2
More effective c++ Chap1~2
 
Chapter5 ~ 6
Chapter5 ~ 6Chapter5 ~ 6
Chapter5 ~ 6
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 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)
 

Similar to [SwiftStudy 2016] 3장. 함수

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
 
Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))경원 정
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날명준 김
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장Jong Pil Won
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Park Jonggun
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic functionYong Joon Moon
 
Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
Scala 기초 (2)
Scala 기초 (2)Scala 기초 (2)
Scala 기초 (2)명성 정
 
Scala block expression
Scala block expressionScala block expression
Scala block expressionYong Joon Moon
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스Changwon National University
 
[Swift] Access control
[Swift] Access control[Swift] Access control
[Swift] Access controlBill Kim
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)Sung-hoon Ma
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수유진 변
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] ClosureBill Kim
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)규열 김
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 

Similar to [SwiftStudy 2016] 3장. 함수 (20)

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++
 
Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))Swift세미나(속성(properties), 메소드(method))
Swift세미나(속성(properties), 메소드(method))
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
 
[2011 04 30]python-3장
[2011 04 30]python-3장[2011 04 30]python-3장
[2011 04 30]python-3장
 
Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수Start IoT with JavaScript - 6.함수
Start IoT with JavaScript - 6.함수
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
 
Scala syntax function
Scala syntax functionScala syntax function
Scala syntax function
 
Template at c++
Template at c++Template at c++
Template at c++
 
Scala 기초 (2)
Scala 기초 (2)Scala 기초 (2)
Scala 기초 (2)
 
9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
Scala block expression
Scala block expressionScala block expression
Scala block expression
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
Scala variable
Scala variableScala variable
Scala variable
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스
 
[Swift] Access control
[Swift] Access control[Swift] Access control
[Swift] Access control
 
0.javascript기본(~3일차내)
0.javascript기본(~3일차내)0.javascript기본(~3일차내)
0.javascript기본(~3일차내)
 
자바스크립트 함수
자바스크립트 함수자바스크립트 함수
자바스크립트 함수
 
[Swift] Closure
[Swift] Closure[Swift] Closure
[Swift] Closure
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 

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] 3장. 함수

  • 2. 학습목표 • 함수의 선언과 사용을 알 수 있다. • closure를 알 수 있다.
  • 3. 함수 선언/정의: 생김새 나는 함수다! 파라메터명 파라메터 타입 반환값 타입 함수명
  • 4. 함수 호출 Arg Label파라메터함수명 반환값이 있는 함수는 return값을 받지 않으면 warning (Swift 3) 반환값을 사용하지 않을때는 명시적으로 사용하지 않음을 표기 ‘_’ 는 사용하지 않는 변수 등의 이름을 위해 정의된 특별한 키워드 (이따 또 나옵니다)
  • 5. 함수 선언/정의: 반환 값이 없으면 반환 타입 생 략 또는 Void
  • 6. 함수 선언/정의: 함수 파라메터는 상수로 취급 반환값 타입 참고: Swift 2.x까지는 var 키워드를 파라메터 앞에 붙이면 함수 파라메터를 변경 가능한 변수로 사용 가능 Swift 3에서는 var 키워드 허용하지 않음
  • 7. 함수 선언/정의: Argument Labels 함수를 사용할때 붙는 arg1과 arg2의 정체?Argument Labels Default Argument Label: Parameter Name argument label을 생략하면 argument label은 파라메터 이 름과 동일 argument label을 파라메터 이름과 다르게 사용하고 싶으면, 파라메터 이름 앞에 argument Label을 적으면됨 함수를 호출할때 변경한 argument label을 붙여야함
  • 8. 함수 선언/정의: Argument Labels (계속) argument label을 파라메터 이름과 다르게 사용하고 싶으면, 파라메터 이름 앞에 argument Label을 적으면됨 함수를 호출할때 변경한 argument label을 붙여야함 ‘_’ 키워드를 argument label에 붙이면 함수 호출시 argument label 생략됨 참고: Swift 2.x 버전까지는 Objective-C의 사용 습관을 이어받아 첫번째 argument label은 암묵적으로 생략됨.
  • 9. 함수 선언/정의: Argument Labels (계속) • Argument Labels을 통해 얻을 수 있는 이점? 명료함과 가독성을 높일 수 있음 • Argument Labels 수정을 통해 얻을 수 있는 이점? 문장처럼 함수 설계 가능 • 예를 들어,
  • 10. 함수 선언/정의: 튜플 타입 반환 튜플타입을 이용하여 여러 값을 반환 가능
  • 11. 함수 선언/정의: 함수 타입 • 함수에도 타입이 있음 • 예를 들어, 아래 함수의 타입은 (Int, Int)->Int • 함수에도 타입이 있기에 함수도 함수의 파라메터와 반환 값으로 사용 가능
  • 12. 함수 선언/정의: 함수 타입 파라메터 예시 함수 타입 파라메터 함수를 파라메터로 넘김
  • 13. 함수 선언/정의: 함수 타입 함수 타입 반환 반환 받은 함수를 사용
  • 14. Nested functions • 함수 안에 함수 사용 가능 • 함수도 class와 struct 와 같은 타입 • 함수 안에 함수는 부모 함수의 변수를 참조 가능 (마치, class와 struct의 멤버 변수처럼) 함수 안에 함수 사 용 가능
  • 15. Closures • Clousure 지원 • Clousures? self-contained blocks of functionality that can be passed around and used in your code • 프로그램 상 전달 가능한 코드 블럭 • 함수도 Clousures의 종류 ==> 그러니까 앞에서 말한 함수에 대한 특징들이 적용됨 • 실제 Cocoa/Cocoa Touch API 사용시 Clousures를 많이 사용하게 됨
  • 16. Closures 사용 예시 소박하게 아까 배운 대로 전역 함수를 파라메터로 넘기는 것 부 터 시작…
  • 17. Closures 사용 예시 (계속) 함수 네이밍을 없애고 직접 적음. 모양새가 closure 같 아짐?! in 이후부터 body 시작
  • 18. Closures 사용 예시 (계속) 입력 파라메터 함수 타입이 명확하기 때문에 closure의 반환 타입 추론가능 ==> 생략가능
  • 19. Closures 사용 예시 (계속) single-expression closure의 경우 어차피 한줄 적은게 반환되는 값임 ==> return 키워드 생략가능
  • 20. Closures 사용 예시 (계속) 파라메터는 2개이고 각 파라메터의 타입도 어차피 알고 있음. ==> in 키워드와 파라메터 네이밍 선언 부분 생략 가능
  • 21. Closures 사용 예시 (계속) 2개의 값을 비교하는 경우에는 굳이 파라메터를 내부에서 구별할 필요도 없음 ==> operation만 명시 가능
  • 23. Closures 사용 예시 (계속) 코드 줄이는건 신났는데… closure 내의 코드 량이 많으면 어떡함?
  • 24. Trailing closures • closure의 코드 량이 많아지면 함수 선언이 복잡해짐. 끝을 따라가 기 힘듦 • closure 파라메터가 함수의 마지막 파라메터로 오는 경우, 함수 선 언을 모두 마친 이후에 기재 가능 • 예를 들어, 예전 버전. 이것보다 선언이 명확하고 깔 끔해짐