7.2.1 내부 매개변수명, 외부 매개변수명
스위프트에서는 함수를 정의할 때 매개변수를 용도에 따라 두 가지로 분리할 수 있습니다. 내부 매개변수와 외부 매개변수입니다. 외부 매개변수는 함수를 호출할 때 인자값에 대한 레이블 역할을 하고, 동시에 식별자 일부로 사용되기도 합니다. 내부 매개변수는 입력된 인자값을 함수 내부에서 참조하기 위해 사용하는 변수입니다.
별도로 외부 매개변수를 나누지 않을 경우 일반 매개변수가 인자 레이블 역할까지 겸하지만, 외부 매개변수를 명시적으로 정의하면 이때부터는 외부 매개변수가 인자 레이블이 됩니다. 외부 매개변수를 지정하는 방법은 다음과 같습니다.
func 함수명(<외부 매개변수명><내부 매개변수명>: <타입>, <외부 매개변수명><내부 매개변수명>: <타입>..) {
// 함수 내용 작성
}
함수를 정의할 때 내부 매개변수명 앞에 외부 매개변수명을 넣어주기만 하면 됩니다. 사용 예시를 보시겠습니다.
func printHello(to name: String, welcomeMessage msg: String) {
print("\(name)님, \(msg)")
}
printHello(to: "홍길동", welcomeMessage: "안녕하세요")
이전과 호출 방식이 달라졌습니다. 매개변수명 name 대신 to를, msg 대신 welcomeMessage라는 외부 매개변수명을 넣어주고 있습니다. 함수 내부에서는 내부 매개변수명인 name, msg가 사용됩니다. 위 함수는 함수명으로 표현하면 아래와 같습니다.
printHello(to:welcomeMessage:)
외부 매개변수의 사용을 좋아하지 않는 사람들을 위해 함수의 호출 시 매개변수명을 생략할 수 있는 옵션도 있습니다. 바로 언더바(_)를 활용하면 됩니다.
func printHello(_ name: String, _ msg: String) {
print("\(name)님, \(msg)")
}
printHello("홍길동", "안녕하세요")
이렇게 바꾸면 이제는 함수 호출 시 매개변수명을 붙이려고 하면 오류가 발생하게 됩니다.
일부 매개변수만 언더바로 처리하는 것도 가능합니다
func printHello(to name: String, _ msg: String) {
print("\(name)님, \(msg)")
}
printHello(to: "홍길동", "안녕하세요")
이때의 함수명은 아래와 같이 표기됩니다.
printHello(to:_:)
Last updated