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 파라메터가 함수의 마지막 파라메터로 오는 경우, 함수 선
언을 모두 마친 이후에 기재 가능
• 예를 들어,
예전 버전. 이것보다 선언이 명확하고 깔
끔해짐

[SwiftStudy 2016] 3장. 함수

  • 1.
  • 2.
    학습목표 • 함수의 선언과사용을 알 수 있다. • closure를 알 수 있다.
  • 3.
    함수 선언/정의: 생김새 나는함수다! 파라메터명 파라메터 타입 반환값 타입 함수명
  • 4.
    함수 호출 Arg Label파라메터함수명 반환값이있는 함수는 return값을 받지 않으면 warning (Swift 3) 반환값을 사용하지 않을때는 명시적으로 사용하지 않음을 표기 ‘_’ 는 사용하지 않는 변수 등의 이름을 위해 정의된 특별한 키워드 (이따 또 나옵니다)
  • 5.
    함수 선언/정의: 반환값이 없으면 반환 타입 생 략 또는 Void
  • 6.
    함수 선언/정의: 함수파라메터는 상수로 취급 반환값 타입 참고: Swift 2.x까지는 var 키워드를 파라메터 앞에 붙이면 함수 파라메터를 변경 가능한 변수로 사용 가능 Swift 3에서는 var 키워드 허용하지 않음
  • 7.
    함수 선언/정의: ArgumentLabels 함수를 사용할때 붙는 arg1과 arg2의 정체?Argument Labels Default Argument Label: Parameter Name argument label을 생략하면 argument label은 파라메터 이 름과 동일 argument label을 파라메터 이름과 다르게 사용하고 싶으면, 파라메터 이름 앞에 argument Label을 적으면됨 함수를 호출할때 변경한 argument label을 붙여야함
  • 8.
    함수 선언/정의: ArgumentLabels (계속) argument label을 파라메터 이름과 다르게 사용하고 싶으면, 파라메터 이름 앞에 argument Label을 적으면됨 함수를 호출할때 변경한 argument label을 붙여야함 ‘_’ 키워드를 argument label에 붙이면 함수 호출시 argument label 생략됨 참고: Swift 2.x 버전까지는 Objective-C의 사용 습관을 이어받아 첫번째 argument label은 암묵적으로 생략됨.
  • 9.
    함수 선언/정의: ArgumentLabels (계속) • 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만 명시 가능
  • 22.
  • 23.
    Closures 사용 예시(계속) 코드 줄이는건 신났는데… closure 내의 코드 량이 많으면 어떡함?
  • 24.
    Trailing closures • closure의코드 량이 많아지면 함수 선언이 복잡해짐. 끝을 따라가 기 힘듦 • closure 파라메터가 함수의 마지막 파라메터로 오는 경우, 함수 선 언을 모두 마친 이후에 기재 가능 • 예를 들어, 예전 버전. 이것보다 선언이 명확하고 깔 끔해짐