조앤의 기술블로그
[Swift] Functions #2 본문
지난 포스팅에 이어서 함수에 관해 알아보겠습니다. 이번 포스팅은 Argument Label, Variadic Parameters, In-Out Parameters에 관한 내용입니다.
<Argument Label>
Label은 이름이란 뜻입니다. 즉, 인자에 이름을 붙여서 함수 코드의 가독성을 높이는 것입니다.
// (name: Type)
// name - parameter Name, Argement Label
// (label name: Type)
// label - Argument Label
// name - parameter Name
func sayHello(to name: String) {
print("Hello, \(name)")
// name - 함수 body에서 사용
// to - 함수를 호출할 때 사용
}
sayHello(to: "Swift")
(label name: Type) 형식으로 작성하고 여기서 label이 Argument label입니다.
위의 코드에서는 to 가 되겠습니다.
sayHello 함수에서 parameter name인 'name'은 함수 body에서 사용하고,
argument label인 'to'는 함수를 호출할 때 사용합니다.
[와일드카드 패턴]
와일드카드 패턴을 사용해서 코드를 더 단순하게 만들 수도 있습니다.
(와일드카드 패턴의 핵심 키워드 두가지 : '생략', '_')
func sayHello(_ name: String) {
print("Hello, \(name)")
}
sayHello("Swift")
argument label을 생략해 더 단순한 코드가 되었습니다.
[이름 규칙]
함수 이름 - 동사 (say)
argument label - 전치사 (to)
parameter name - 명사 (name)
<Variadic Parameters>
가변 파라미터라고 합니다. 하나의 파라미터로 2개 이상의 인자를 전달할 수 있습니다.
가변 파라미터는 인자를 배열 형태로 전달합니다.
// (name: Type...)
func printSum(of nums: Int...) {
// nums의 자료형 [Int]
var sum = 0
for num in nums {
sum += num
}
print(sum)
}
printSum(of: 1, 2, 3)
printSum(of: 1, 2, 3, 4, 5)
[제약]
- 가변 파라미터는 함수 당 하나씩만 선언이 가능합니다.
//func printSum(of nums:Int..., b: Double...) // 불가능
- 가변 파라미터는 기본값(default value) 지정이 불가능합니다.
<In-Out Parameters>
입출력 파라미터입니다.
컴퓨터 언어를 공부하신 분들이라면 swap 함수 예제를 잘 알고 계실겁니다.
var num1 = 12
var num2 = 34
func swap(_ a: Int, with b: Int) {
var tmp = a
a = b
b = tmp
}
Swift에서는 위처럼 코드를 작성하면 안됩니다.
파라미터는 임시 상수이기 때문에, 그리고 파라미터에서 실제 값이 아닌 복사본이 전달되기 때문에 실제 값은 바뀌지 않습니다.
인자로 전달된 값을 직접 바꾸기 위해서 사용해야하는 것이 '입출력 파라미터' 입니다.
// (name: inout Type)
//functionName(argLable: &expr)
func swap(_ a: inout Int, with b: inout Int) {
let tmp = a
a = b
b = tmp
}
swap(&num1, with: &num2)
[제약]
- 동일한 변수를 2번 이상 전달할 수 없습니다. 각각 별도의 변수를 전달해야 합니다.
- 상수는 copy out이 불가합니다.
- literal은 전달이 불가합니다.
- 기본값 지정을 할 수 없습니다.
참고 : KxCoding.com
감사합니다.
'Study > Swift' 카테고리의 다른 글
[Swift] Property(프로퍼티) #1 (0) | 2020.02.20 |
---|---|
Tuples (튜플) (0) | 2020.02.18 |
Functions #1 (function, return type, parameter) (0) | 2020.02.18 |
[Swift] guard Statement (guard문) (0) | 2020.02.16 |
[Swift] Structures and Classes (구조체와 클래스) (0) | 2020.02.16 |