Swift - Function
안녕하세요. Tag입니다. 😀
오늘은 함수(Fuction)에 대해 알아보려고 합니다.
프로그래밍에서 함수란?
프로그래밍에서 함수란 어떤 일을 수행하는 명령들을 하나로 묶어서 이름을 부여하고 필요할 때마다 함수를 호출하여 사용할 수 있는 하나의 코드 블럭이며
공식문서에서는 특정 작업을 수행하는 독립적인 코드 덩어리라고 정의하고 있습니다. 또한 함수에 해당하는 이름을 지정하고 필요할 때 작업을 수행하기 위해 함수를 호출하는데 사용한다.라고 설명하고 있습니다.
Swift에서 함수의 선언 방법
func 함수명(전달인자이름 매개변수이름: 타입, 전달인자이름 매개변수이름: 타입, ...) -> 반환 타입 {
코드
}
Swift에서 함수는 함수명과 매개변수를 입력 받아 반환 타입에 맞는 타입으로 값을 반환하는 형식이다.
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
print(greet(person: "Tag"))
// Hello, Tag!
간단한 예제를 살펴보면 {}인 중괄호 전체로 둘러쌓인 부분이 하나의 코드 블럭이며 이는 func greet를 통해 선언되어 있고 해당 함수의 이름를 통해 함수의 호출이 이루어진다고 보면 된다.
반환 타입
반환 타입이란 함수를 실행하고 반환할 타입을 명시하는 부분이며 반환 타입은 있을 수도 있고 없을 수도 있다.
func greet(person: String) {
print("Hello, \(person)!")
}
greet(person: "Tag")
// Prints "Hello, Tag!"
반환 타입이 없는 함수
기존 예제에서 return의 반환 타입을 없애고 반환 타입이 없는 함수로 사용이 가능하다.
여러 반환 값을 가지는 함수
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
위 코드는 여러개의 반환 값을 가지는 함수로 반환 타입으로 여러 반환 값을 반환하는 것이 가능하다.
매개변수(parameter)와 전달인자(argument)
매개변수란 함수가 동작할 때 내부에서 사용될 변수명을 의미합니다.
전달인자란 함수가 호출 될 때, 입력되는 실제 값을 의미합니다.
func greet(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Tag", from: "Korea"))
/// prints "Hello Tag! Glad you could visit from Korea."
위 코드를 예시로 보면 매개변수란 함수 내부에서 사용될 변수명이며 person과 hometown을 의미한다.
전달인자는 person과 from이 받아오는 "Tag"와 "Korea"라고 할 수 있으며 위 코드에서 from은 전달인자 레이블(argument label)이다.
매개변수와 전달인자를 따로 사용하는 이유
전달인자는 함수에서 사용하지 않을 경우 디폴트 값으로 매개변수를 따라가지만 몇몇 함수에서는 전달인자를 활용하여 함수를 사용하는 경우가 있다. 이러한 이유는 공식 문서에서는 코드를 좀더 풍부하고 이해하기 쉽게 하기 위해 사용하다고 하였다. 함수를 외부에서 읽을 때 좀더 원활하게 이해할 수 있게 전달인자 레이블을 활용하여 함수를 보여주고 함수 내부에서는 매개변수를 활용하여 코드의 가독성을 늘릴 수 있다는 이유에서 일 것이다.
[참고]
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/functions/