함수를 정의할 때 외부 매개변수 자리에 언더바('_')를 붙일 때가 있는데,
이는 '외부 매개변수' 이름을 사용하지 않음을 나타낸다.
외부 매개변수가 무엇인지는 아래에서 정리하겠다!
📌 언더바('_') 의 역할
1) 언더바('_') 없을 때
아래 코드처럼 언더바 없이 함수를 정의하면
함수 호출 시 매개변수 이름을 명시해주어야 한다. => multiply(number1: 5, by: 3)
// 함수 정의
func multiply(number1: Int, by number2: Int) -> Int {
return number1 * number2
}
// 함수 호출
let result = multiply(number1: 5, by: 3)
2) 언더바('_') 있을 때
반면, 외부 매개변수 자리에 언더바를 적어주면
함수를 호출할 때 매개변수 이름을 생략해도 된다.
아니, 매개변수 이름을 적으면 오류가 발생하므로 반드시 생략해야 한다.
아래 코드에서 number1은 함수를 정의할 때 '_'를 적었으므로 호출 시 변수명을 생략했고,
number2는 '_'를 적지 않았으므로 호출 시 변수명을 명시했다. (by : 외부 매개변수, number2 : 내부 매개변수)
=> multiply(5, by: 3)
// 함수 정의
func multiply(_ number1: Int, by number2: Int) -> Int {
return number1 * number2
}
// 함수 호출
let result = multiply(5, by: 3)
📌 외부 매개변수, 내부 매개변수
이제는 외부 매개변수, 내부 매개변수가 무엇인지 정리하겠다.
참고: josee2님 블로그 (https://josee2.tistory.com/22)
기본적으로 함수를 정의하는 형식은 다음과 같다.
func 함수이름(<외부 매개변수명> <내부 매개변수명>: <타입>, ...) {
// 함수 내용
}
▶ 외부 매개변수와 내부 매개변수의 역할
여기서 외부 매개변수는 함수를 호출할 때 인자값에 대한 인자 레이블(Argument Label) 역할을 하며, 함수의 식별자 일부로 사용된다. (참고: 외부 매개변수를 별도로 설정하지 않을 시, 일반 매개변수가 인자 레이블 역할을 겸한다.)
내부 매개변수는 입력된 인자값을 함수 내부에서 참조하기 위해 사용하는 변수이다.
*참고 : 매개변수(parameter) vs. 전달인자(arguement)
|
|
- 매개변수 : 함수의 정의부분에 나열되어 있는 변수들.
ex. f(x) = x*x 와 같은 함수 정의 부분에서 변수 'x'
|
- 전달인자 : 함수를 호출할 때 전달되는 실제 값.
ex. f(2)와 같은 함수 호출 부분에서 값 '2'
|
▶ 외부 매개변수를 사용하는 이유
스위프트 언어만의 특징인 외부 매개변수명은 다음과 같은 이유로 사용된다.
- 매개변수명이 내부와 외부에서 바라보는 의미가 달라서 외부와 내부로 구분하여 사용할 필요가 있을 때,
- 내부 매개변수명을 외부로 공개하기 원치 않을 때,
- 내부 매개변수명이 너무 길어 호출이 불편할 때
그러나 가장 큰 목적은 오브젝티브-C와의 호환성 때문이라고 한다.
▶ 외부 매개변수는 생략 가능하기도 한데,
상황에 따라 1) 함수 정의 및 호출 방법, 2) 함수명이 달라진다.
아래가 그 4가지 경우이다.
1) 외부 매개변수를 사용하지 않는 경우
-> 함수 호출 시 매개변수명 명시
-> 함수명 : multiply(number1:number2:)
// 함수 정의
func multiply(number1: Int, number2: Int) -> Int {
return number1 * number2
}
// 함수 호출
let result = multiply(number1: 5, by: 3)
2) 외부 매개변수를 사용하는 경우
-> 함수 호출 시 외부 매개변수명 명시
여기서 첫 번째 변수의 외부 매개변수명 = x, 내부 매개변수명 = number1,
두 번째 변수의 외부 매개변수명 = y, 내부 매개변수명 = number2
-> 함수명 : multiply(x:y:)
// 함수 정의
func multiply(x number1: Int, y number2: Int) -> Int {
return number1 * number2
}
// 함수 호출
let result = multiply(x: 5, y: 3)
3) 외부 매개변수를 생략하는 경우
-> 함수 호출 시 매개변수명 생략
-> 함수명 : multiply(_:_:)
// 함수 정의
func multiply(_ number1: Int, _ number2: Int) -> Int {
return number1 * number2
}
// 함수 호출
let result = multiply(5, 3)
4) 외부 매개변수를 일부만 생략하는 경우
-> 함수 호출 시 해당 매개변수명만 생략
-> 함수명 : multiply(_:y:)
// 함수 정의
func multiply(_ number1: Int, y number2: Int) -> Int {
return number1 * number2
}
// 함수 호출
let result = multiply(5, y:3)
'Swift > 문법' 카테고리의 다른 글
[Swift] 고차함수 - map, filter, reduce (2) | 2024.02.07 |
---|---|
[Swift] if...else 구문 대신 사용 가능한 Ternary Conditional Operator (삼항 연산자) (0) | 2024.02.07 |
앱개발 용어 정리(3) - 구조체와 클래스, 메서드 (0) | 2024.02.07 |
앱개발 용어 정리(2) - 자료형, 변수와 상수 (0) | 2024.02.07 |
앱개발 용어 정리(1) - IDE, 컨벤션 (0) | 2024.02.07 |