[iOS / Swift] 함수 (Function) 정리

2025. 1. 7. 16:45

함수는 어떤 작업을 수행하는 코드 묶음임. Swift에서 함수는 코드의 재사용성을 높이고, 깔끔하게 관리하기 위해 필수적인 요소임.


1. 함수의 기본 구조

func 함수이름(매개변수: 매개변수 타입) -> 반환타입 {
	실행될 코드
}
  • 함수 이름Low Camel Case로 작성.
  • 매개변수(Parameter): 함수 내부에서 사용할 변수.
  • 반환 타입(Return Type): 함수가 결과로 반환하는 값의 타입.
  • 반환값이 없을 때는 `Void`(또는 생략 가능).

예제로 가장 간단한 함수를 만들어 보겠음

func sayHello() {
    print("Hello")
}

`sayHello`라는 함수를 만들었고 저 함수가 호출됐을 떄 실행되는 코드는 Hello라는 텍스트임. 호출 하는 방법은 아래와 같음

sayHello() // 출력 : Hello

2. 매개변수가 있는 함수

기본 구조

func sayHello(to name: String) {
    print("Hello, \(name)")
}
  • `to`는 Arugment Label로, 호출 시 사용함
  • `name`은 Parameter Name으로, 함수 내부에서 사용함
sayHello(to: "Doseo") // 출력 : Hello, Doseo

 

Argument Label 생략

Argument Label을 생략하려면 `_`를 사용하면 됨

func sayHello(_ name: String) {
    print("Hello, \(name)")
}

sayHello("Doseo") // 출력 : Hello, Doseo

3. 여러 매개변수를 가진 함수

func add(a: Int, b: Int) {
    print(a + b)
}
  • `a`와 `b`는 Parameter
  • 함수 호출시 Arguments를 전달해야 함
add(a: 3, b: 4) // 출력: 7

4. 반환값이 있는 함수

func multiply(a: Int, b: Int) -> Int {
    return a * b
}
  • `a`와 `b`를 곱한 값을 반환
  • `-> Int`는 반환 타입
let result = multiply(a: 3, b: 4)
print(result) // 출력 : 12

 

만약 반환값을 무시하고 싶다면??

Swift에서는 반환값을 사용하지 않을 떄 경고가 발생할 수 있음. 이때 `@discardableResult`를 사용하면 경고를 없앨 수 있음

@discardableResult
func multiply(a: Int, b: Int) -> Int {
    return a * b
}

multiply(a: 3, b: 4) // 반환값을 사용하지 않아도 경고가 없음

5. 기본값이 있는 매개변수

func greet(name: Stromg = "Guest") {
    print("Hello, \(name)")
}
  • 기본값이 설정된 경우, 호출 시 매개변수를 생략 가능
greet()            // 출력: Hello, Guest
greet(name: "Lee") // 출력: Hello, Lee
  • 단, 기본값이 있어도 Argument Label생략 불가능

6. 가변 매개변수

가변 매개변수를 사용하면 0개 이상의 값을 배열처럼 전달할 수 있음. (빈집 이라고 생각하면 됨)

func sum(_ numbers: Int...) -> Int {
    return numbers.reduce(0, +)
}

sum(1, 2, 3, 4) // 출력 : 10
sum(5)			// 출력 : 5

7. Argument Label과 Parameter Name

Swift 함수에서는 매개변수가 Argument LabelParameter Name이라는 두 가지 이름을 가질 수 있음.

 

1) Argument Label

  • Argument Label은 함수 호출 시 매개변수를 구분하는데 사용됨.
  • 함수 외부(함수 호출 시)에 매개변수의 의미를 명확히 하기 위해 사용함.

2) Parameter Name

  • Parameter Name함수 내부에서 매개변수에 접근할 때 사용
  • 함수 내부에서 해당 매개변수를 이름으로 호출함

예시

func devide(numerator: Int, by denominator: Int) -> Int {
    return numerator / denominator
}

// 함수 호출
devide(numerator: 10, by: 2) // 출력 : 5
  1. `numerator`와 `denominator`는 Parameter Name으로, 함수 내부에서 사용
  2. `by`는 Argument Label로, 호출 시 사용
  3. `by`를 사용해 매개변수를 전달하므로 가독성이 높아짐
  4. 함수 내부에서는 `deniminator`라는 이름으로 값을 사용

가볍게 Argument Label을 커스텀해서 사용해 보겠음

func welcomeText(user name: String, withGreeting greeting: String) {
    print("\(greeting), \(name)")
}
  • `user`와 `withGreeting`은 Argument Label
  • `name`과 `greeting`은 Parameter Name

함수 호출을 하는 방법

welcomeText(user: "Doseo", withGreeting: "Hello") // 출력: Hello, Doseo

함수는 단순히 코드를 묶는 역할을 넘어, 코드의 가독성과 재사용성을 극대화하는 중요한 도구임.

매개변수와 반환값의 조합, Argument Label 설정, 기본값, 가변 매개변수 등 다양한 기능을 활용해서 더 직관적이고 코드를 작성할 수 있음!

BELATED ARTICLES

more