[swift] 스위프트 함수

스위프트에서 함수는 코드를 모듈화하고 재사용하기 위한 중요한 요소입니다. 함수는 값을 반환하거나 반환하지 않을 수 있으며, 파라미터를 받을 수 있습니다. 이 글에서는 스위프트에서 함수를 선언하고 호출하는 방법을 알아보겠습니다.

함수 선언

스위프트에서 함수는 func 키워드로 선언됩니다. 함수 선언의 기본 구조는 다음과 같습니다:

func 함수이름(파라미터1: 타입, 파라미터2: 타입, ...) -> 반환타입 {
    // 함수 내용
    return 반환값
}

여기서 파라미터1, 파라미터2는 함수에 전달되는 값의 이름이고, 타입은 해당 값의 데이터 타입을 나타냅니다. 반환타입은 함수가 반환하는 값의 데이터 타입을 나타냅니다.

예를 들어, 두 개의 정수를 받아서 그 합을 반환하는 함수는 다음과 같이 선언할 수 있습니다:

func addNumbers(a: Int, b: Int) -> Int {
    return a + b
}

함수 호출

선언된 함수는 다음과 같이 호출될 수 있습니다:

let result = addNumbers(a: 5, b: 3)
print(result) // 출력: 8

addNumbers(a: 5, b: 3)addNumbers 함수를 호출하고, a에는 5, b에는 3이 전달됩니다. 함수는 ab를 더한 값을 반환하고, 이 값은 result에 저장되어 출력됩니다.

내부 및 외부 파라미터 명

스위프트에서는 함수 선언시 파라미터의 내부 이름과 외부 이름을 지정할 수 있습니다. 내부 이름은 함수 내부에서 사용되는 파라미터 이름이고, 외부 이름은 함수를 호출할 때 사용되는 이름입니다. 파라미터의 외부 이름을 지정하기 위해서는 파라미터 이름 앞에 외부 이름을 명시해줍니다.

예를 들어, 다음과 같이 함수를 선언할 수 있습니다:

func multiply(_ a: Int, by b: Int) -> Int {
    return a * b
}

이 경우에는 a의 외부 이름이 생략되었고, b의 외부 이름이 by로 지정되었습니다. 그래서 함수를 호출할 때에는 다음과 같이 호출할 수 있습니다:

let result = multiply(5, by: 3)
print(result) // 출력: 15

변수 파라미터와 상수 파라미터

함수의 파라미터로 변수를 받을 때는 var 키워드를 사용하고, 상수를 받을 때는 let 키워드를 사용합니다.

예를 들어, 다음과 같은 함수를 선언할 수 있습니다:

func incrementValue(_ value: inout Int) {
    value += 1
}

이 함수는 변수를 파라미터로 받아 해당 변수의 값을 1만큼 증가시킵니다. 함수를 호출할 때에는 변수 앞에 & 기호를 붙여서 호출해야 합니다.

var number = 7
incrementValue(&number)
print(number) // 출력: 8

함수 중첩

스위프트에서는 함수를 다른 함수 내에 중첩하여 정의할 수 있습니다. 중첩된 함수는 외부 함수의 변수에 접근할 수 있습니다.

예를 들어,

func outerFunction() -> Int {
    var x = 10
    func innerFunction(y: Int) -> Int {
        return x + y
    }
    return innerFunction(y: 5)
}

print(outerFunction()) // 출력: 15

innerFunctionouterFunction 내에서 정의되었고, x에 접근하여 값을 반환합니다.

함수는 스위프트에서 코드를 구조화하고 모듈화하는 데에 중요한 수단입니다. 어떤 프로그램이든 다양한 함수를 활용하여 가독성 높고 유지보수가 쉬운 코드를 작성할 수 있습니다.

이상으로, 스위프트에서 함수를 선언하고 호출하는 방법에 대해 알아보았습니다. 기본적으로 스위프트 함수에 대한 이해를 바탕으로, 다양한 유형의 함수를 구현하고 활용할 수 있을 것입니다.

References:

  1. The Swift Programming Language - Functions (Apple Developer Documentation)
  2. Swift Functions (GeeksforGeeks)