본문 바로가기

앱 개발/IOS

[IOS 프로그래밍을 위한 스위프트 기초] 1단원 08. 함수 고급

08. 함수 고급

매개변수 기본값

기본값을 갖는 매개변수는 매개변수 목록 중에 뒤쪽에 위치하는 것이 좋다.

형식

func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ...) -> 변환타입 {
	함수의 구현부
    return 반환값
}

예시

func greeting(friend: String, me: String = "fuyukawa") {
	print( "Hello \(friend)! I'm \(me)")
}

매개변수 기본값을 가지는 매개변수는 생략할 수 있다.

greeting(friend: "hana") // Hello hana! I'm fuyukawa
greeting(friend: "john", me: "eric") // Hello john! I'm eric

 

전달인자 레이블

전달인자 레이블은 함수를 호출할 때 매개변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용한다.

형식

func 함수이름(전달인자 레이블 매개변수1이름: 매겨변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
	함수의 구현부
    return
}

예시

func greeting(to friend: String, from me: String) {
	print("Hello \(friend)! I'm \(me)")
}

 

가변 매개변수

전달 받을 값의 개수를 알기 어려울 때 사용할 수 있다.

가변 매개변수는 함수당 하나만 가질 수 있다.

형식

func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타임...) -> 반환타입 {
	함수의 구현부
    return
}

예시

func sayHelloToFriends(me: String, friends: String...) -> String {
	return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFirends(me: "fuyukawa", friends: "hana", "eric", "wing"))
// Hello ["hana", "eric", wing"]! I'm fuyukawa!
print(sayHelloToFriends(me: "fuyukawa"))
// Hello []! I'm fuyukawa!

여기서 가변인자를 넘기지 않는다는 의미로 nil을 넣으면 오류가 발생한다.

 

데이터 타입으로서의 함수

스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이다.

스위프트의 함수는 일급객체이므로 변수, 상수 등에 저장이 가능하고 매개변수를 통해 전달할 수도 있다.

함수의 타입표현

반환타입을 생략할 수 없다.

(매개변수1타입, 매개변수2타입 ...) -> 반환타입

예시

var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("eric", "fuyukawa") // Hello eric! I'm fuyukawa
someFunction = greeting(friend:me:)
someFunction("eric", "fuyukawa") // Hello eric! I'm fuyukawa

다만, 타입이 다른 함수는 할당할 수 없다.

someFunction = sayHelloToFriends(me: friends:) // 오류 발생

예시

func runAnother(function: (String, String) -> Void) {
	function("jenny", "mike")
}

// Hello jenny! I'm mike
runAnother(function: greeting(friend:me:))

// Hello jenny! I'm mike
runAnother(function: someFunction)

 

 

 

 

 

 

©️NAVER Boostcourse. All Rights Reserved.