Swift에서 함수를 사용하는 방법 총정리

Swift 함수의 정의, 매개변수, 반환값, inout 매개변수, 고차 함수 활용법까지 알아보세요


Swift에서 함수를 사용하는 방법 총정리

Swift에서 함수 정의하고 사용하는 방법

함수는 func 키워드로 정의합니다. 함수 이름 뒤에 괄호 안에 매개변수를 정의하고, -> 뒤에 반환 타입을 정의합니다. 함수 본문은 중괄호 안에 작성합니다.

func greet(name: String) -> String {
    return "Hello, \(name)!"
}
 
greet(name: "Alice") // Hello, Alice!

단일 표현식 함수의 return 키워드 생략

함수가 단일 표현식을 사용할 경우, return 키워드를 생략할 수 있습니다.

func greet(name: String) -> String {
    "Hello, \(name)!"
}

반환 타입이 Void인 경우 함수 리턴 타입 생략

함수의 return 타입이 Void인 경우, 반환 값을 생략할 수 있습니다.

func greet(name: String) -> Void {
    print("Hello, \(name)!")
}
 
greet(name: "Alice") // Hello, Alice!
 
// 위 코드는 아래와 같습니다.
func greet(name: String) {
    print("Hello, \(name)!")
}
 
greet(name: "Alice") // Hello, Alice!

여러 개의 매개변수

함수는 여러 개의 매개변수를 가질 수 있습니다.

func greet(name: String, age: Int) -> String {
    return "Hello, \(name)! You are \(age) years old."
}
 
greet(name: "Alice", age: 25) // Hello, Alice! You are 25 years old.

매개변수에 기본값 제공

함수는 매개변수에 기본값을 제공할 수 있습니다.

func greet(name: String, age: Int = 20) -> String {
    return "Hello, \(name)! You are \(age) years old."
}
 
greet(name: "Alice") // Hello, Alice! You are 20 years old.
greet(name: "Alice", age: 25) // Hello, Alice! You are 25 years old.

레이블

함수는 매개변수에 레이블을 제공할 수 있습니다.

func greet(to name: String) -> String {
    return "Hello, \(name)!"
}
 
greet(to: "Alice") // Hello, Alice!

레이블 생략

함수의 매개변수에 underscore를 사용하여 레이블을 생략할 수 있습니다.

func greet(_ name: String) -> String {
    return "Hello, \(name)!"
}
 
greet("Alice") // Hello, Alice!

가변 매개변수

가변 매개변수는 함수 정의에서 매개변수 타입 뒤에 ...을 붙여 정의합니다.

func sum(_ numbers: Int...) -> Int {
    return numbers.reduce(0, +) // 0부터 시작해서 모든 숫자를 더합니다.
}
 
sum(1, 2, 3, 4, 5) // 15

매개변수인 함수

함수는 함수 타입을 변수에 할당할 수 있습니다.

func greet(name: String) -> String {
    return "Hello, \(name)!"
}
 
let greetFunction: (String) -> String = greet
 
greetFunction("Alice") // Hello, Alice!

inout 매개변수

함수 정의에서 매개변수 타입 앞에 inout 키워드를 붙여 정의합니다. 그리고 함수를 호출할 때 매개변수 앞에 &를 붙여 전달합니다. 함수 내부에서 매개변수의 값을 변경하면 원본 변수의 값도 변경됩니다. 주로 함수 내부에서 매개변수의 값을 변경해야 할 때 사용합니다.

func increment(_ number: inout Int) {
    number += 1
}
 
var num = 10
print(num) // 10
increment(&num) // num은 이제 11입니다.
print(num) // 11

고차 함수

Swift 함수는 일급 객체로, 다른 함수의 매개변수로 전달되거나 반환값으로 사용할 수 있다.

func multiplyByTwo(value: Int) -> Int {
    return value * 2
}
 
func applyFunction(_ function: (Int) -> Int, to value: Int) -> Int {
    return function(value)
}
 
let result = applyFunction(multiplyByTwo, to: 5)
print("Applied Result: \(result)")
 
// Applied Result: 10

함수 중첩

함수 내부에 함수를 정의할 수 있습니다.

func outerFunction() -> () -> Int {
    func innerFunction() -> Int {
        return 42
    }
    return innerFunction
}
 
outerFunction()() // 42