[Swift 기본 문법] 함수 (Function)

Ryan (Geonhee) Son·2021년 3월 6일
0
post-thumbnail

본 Lecture Note는 yagom.net의 '스위프트 기초' 강의를 수강하고 작성하였습니다.

Swift에서의 함수 선언, 호출, 매개변수, 매개변수 기본값, 가변매개변수, 전달인자 레이블, 함수 데이터 타입에 대해 알아보겠습니다.

함수의 선언 (Declaration of a Function)

함수의 선언은 아래와 같이 할 수 있습니다. 매개변수(parameter), 반환값(return value)이 없는 경우 각각 해당하는 부분을 지우고 사용하면 됩니다.

// 매개변수와 반환값이 있는 함수
func functionName(parameterName1: parameterType1, ...) -> ReturnType {
  function body
  return returnValue
}

// 매개변수가 없는 함수
func maximumIntegerValue() -> Int {
	return Int.max
}

// 매개변수와 반환값이 없는 함수 (함수가 간단한 경우 줄바꿈을 하지 않아도 됩니다.)
func printMyName(name: String) { print(name) }
}

함수의 호출 (Call of a Function)

함수의 호출은 아래와 같이 할 수 있습니다.

sum(a: 3, b: 5)	// 8
maximumIntegerValue()	// Int의 최댓값

매개변수 기본값 (Default Value of a Parameter)

매개변수에 기본값을 정해두면 매겨변수에 값을 입력하지 않아도 자동적으로 매개변수를 갖도록 할 수 있습니다. 물론 매개변수에 입력값이 있다면 해당 값이 반영됩니다. 기본값을 갖는 매개변수는 매개변수 목록 중에 뒤쪽에 위치하도록 하는 것이 좋습니다.

func functionName(parameter1Name: parameter1Type, 
          	  parameter2Name: parameter2Type = parameter default value,
          	  ...) -> ReturnType {
	function body
    return returnValue
}

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

전달인자 레이블 (Argument Label)

함수를 호출할 때 매개변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 매개변수가 어떤 역할을 하는지 명확하게 표현하고자 할 때 사용합니다. 전달인자 레이블은 함수의 이름의 일부로 취급되기 때문에 손쉽게 함수를 중복 정의할 수 있습니다.

func functionName(argument1Label parameter1Name: parameter1Type, ...) -> ReturnType {
	function body
    return returnValue
}

// 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용합니다.
func greeting(to friend: String, from me: String) {
	print("Hello \(friend)! I'm \(me).")
}

// 함수를 호출할 때에는 전달인자 레이블을 사용합니다.
greeting(to: "Kio", from: "Steven")	// Hello Kio! I'm Steven.

가변 매개변수 (Variable Parameter)

전달 받을 값의 개수를 알기 어려울 때 가변 매개변수를 사용할 수 있습니다. 가변 매개변수는 함수당 하나만 가질 수 있습니다. 매개변수 타입 뒤에 마침표 세 개를 작성하여 사용할 수 있습니다.

func functionName(parameter1Name: parameter1Type,
		  argumentLabel parameter2Name: parameter2Type...) -> ReturnType {
	function body
}

func sayHelloToFriends(me: String, friends: String...) -> String {
	return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFriends(me: "Ryan", friends: "Kio", "Steven", "Kane"))
// Hello ["Kio", "Steven", "Kane"]! I'm Ryan!

print(sayHelloToFriends(me: "Ryan"))
// Hello []! I'm Ryan!

데이터 타입으로서의 함수

Swift는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어입니다. Swift의 함수는 일급 객체이므로 변수, 상수 등에 저장이 가능하고, 매개변수를 통해 전달도 가능합니다.

함수의 타입 표현

함수를 타입으로 표현하고자 할 때는 반환 타입을 생략할 수 없습니다.

(parameter1Type, parameter2Type ...) -> ReturnType

var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("Kio", "Ryan") // Hello Kio! I'm Ryan.

someFunction = greeting(friend:me:)
someFunction("Kio", "Ryan") // Hello Kio! I'm Ryan.

// 타입이 다른 함수는 할당할 수 없습니다 (아래의 경우 가변 매개변수를 가지는 함수).
someFunction = sayHelloToFriends(me: friends:)

func runAnother(function: (String, String) -> Void) {
	function("Steven", "Kane")
}

runAnother(function: greeting(friend:me:))	// Hello Steven! I'm Kane.
runAnother(function: someFunction) // 	Hello Steven! I'm Kane.
profile
합리적인 해법 찾기를 좋아합니다.

1개의 댓글

comment-user-thumbnail
2021년 3월 8일

kio swift 검색하고 들어왔는데 Ryan의 품으로 왔네요ㅎㅎㅎ

답글 달기