7.1.1 사용자 정의 함수

사용자 정의 함수를 정의하는 방식은 다음과 같습니다

func 함수이름(매개변수1: 타입, 매개변수2: 타입: ....) -> 반환타입 {
    실행내용
    return 반환값
}

함수를 정의할 때 function의 약자인 func 키워드를 사용합니다. 그 다음 함수의 이름을 작성하는데, [+, , *, /] 같은 연산자와 예약어는 사용할 수 없습니다. 함수 이름에 사용할 수 있는 문자들은 영어, 숫자, 한자, 바이너리 이미지 등으로 다양하지만 첫 글자는 반드시 영어 또는 언더바(_)로 시작해야 합니다. 언더바 이외 특수문자나 숫자로 시작할 경우 컴파일러에 의해 오류가 발생합니다. 대신 두 번째 글자부터는 이런 제약이 없으므로 영어, 숫자, 일부 특수문자를 충분히 활용할 수 있습니다.

하지만 일반적으로 함수명을 지을 땐 숫자를 사용하지 말고 의미를 잘 전달할 수 있는 문자로만 만드는 것이 좋습니다.

다음으로는 함수의 인자값 개수와 형태를 정의하기 위해 소괄호 영역을 표시해 주는 것입니다. 입력값을 대입 받기 위한 변수의 이름과 타입이 정의되는데 이를 매개변수, 영어로는 파라미터라고 합니다. 매개변수가 여러개라면 ","를 통해 구분하며, 매개변수가 없는 경우 소괄호 내 아무것도 작성하지 않아도 됩니다.

함수의 반환 타입을 표시할 때는 "->" 기호와 함께 표시합니다. 이 기호 다음에 작성된 자료형이 함수가 반환하는 값의 타입입니다. 함수의 성격에 따라서는 반환값이 전혀 없는 함수를 작성할 수도 있습니다. 이 경우에는 "->"와 반환타입을 작성하지 않으면 됩니다.

함수 내부에서 실행내용이 모두 실행되고 결과값을 반환하는데 이때 사용하는 키워드가 return입니다. 다음 예제로 자세히 살펴보겠습니다

// 1. 매개변수와 반환값이 모두 없는 함수
func printHello() {
    print("안녕하세요")
}

// 2. 매개변수는 없지만 반환값은 있는 함수
func sayHello() -> String {
    let returnValue = "안녕하세요"
    return returnValue
}

// 3. 매개변수는 있으나 반환값이 없는 함수
func printHelloWithName(name: String) {
    print("\(name)님, 안녕하세요")
}

// 4. 매개변수와 반환값이 모두 있는 함수
func sayHelloWithName(name: String) -> String {
    let returnValue = "\(name)님, 안녕하세요"
    return returnValue
}

2번과 4번 예제에서 "->" 뒤의 반환타입과 return 뒤의 변수 타입은 일치해야 합니다.

반환값이 없는 함수의 경우에도 return 키워드를 종종 사용하는데, 이때의 return은 함수의 실행을 명시적으로 종료할 목적으로 사용됩니다. 아래 함수는 옵셔널 바인딩이 실패했을 경우 return을 호출하여 실행을 종료합니다

func hello(name: String?) {
    guard let _name = name else {
        return
    }
    
    print("\(_name)님, 안녕하세요")
}

Last updated