안녕하세요~ 차니에요!
지난 기본편에 이어서 확장편 포스팅하겠습니다.
이전 포스팅 먼저 보고 와주세요~
1. 파라미터 확장편
1-1. 파라미터 기본값 설정
func printInfo(name: String = "channy", age: Int = 28) {
print("name: \(name), age : \(age)")
}
위와 같이 함수의 인자에 기본값 설정이 가능합니다.
1-2. 값에 의한 호출 (call by value)
Value Type(ex. String, Int...)은 인자로 사용 시 값이 복사되어 상수(let)로 사용하게 됩니다.
즉 인자로 받은 값은 함수 내부에서 수정이 불가합니다.
1-3. 주소에 의한 호출 (call by reference)
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
func changeName(person: Person, name: String) {
person.name = name
}
var channy = Person.init(name: "channy", age: 28)
print("1: name = \(channy.name)") // channy
changeName(person: channy, name: "chanchan")
print("2: name = \(channy.name)") // chanchan
Refence Type의 인자는 주소에 의한 참조이므로 프로퍼티 값의 변경이 가능합니다.
Person 인스턴스(channy)를 생성하여 해당 인스턴스를 인자로 넘겨주어 값을 변경하는 예제입니다.
1-4. Value Type을 주소 참조 방식으로 전달하는 방법
func printName(name: inout String) {
name = "chanchan!!"
print(name)
}
var name = "channy"
print(name) // channy
printName(name: &name) // chanchan!!
print(name) // chanchan!!
인자의 자료형(Type) 앞에 inout 키워드를 넣고 호출 시에 &변수명 으로 호출해주시면 됩니다.
1-5. 가변 파라미터
func sum(list num: Int...) -> Int {
num.reduce(0, +)
}
print(sum(list: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) // 55
위와 같이 하나의 파라미터(list)가 여러개의 아규먼트를 받을 때 사용합니다.
자료형(Type) 뒤에 ... 을 입력하여 컴파일러에게 연속해서 받을 것임을 알려주면됩니다.
2. 함수 표기법
xCode로 개발하다보면 애플 문서를 보고 함수에 대한 내용을 들여다 보거나 할 일이 있는데 updateValue(_:forKey:) 이런식으로 표기되어 있는걸 함수 표기법으로 표기되었다고 합니다.
2-1. 파라미터가 없는 경우
func printInfo()
파라미터가 없는 함수의 함수 표기법은 printInfo 로 끝이 납니다.
2-2. 파라미터가 있는 경우
func printInfo(_ nm: String, age: Int)
위 함수를 함수 표기법으로 표기하면 printInfo(_:age:) 가 됩니다.
함수명 뒤로 인자들을 : 으로 구분하여 적어주면 됩니다.
이때 생략된(와일드 카드 패턴) 인자들은 _(언더바)로 명시해주어야합니다.
3. 일급 객체 함수와 클로저
지금까지 함수에 대해 정의와 사용법 그리고 특징들을 알아보았는데요.
Swift는 객체 지향의 함수형 언어로 스위프트의 함수는 일급 객체입니다.
이와 관련된 포스팅을 이전에 해놓은게 있으니 함수에 대해 더 깊게 공부하고 싶으신 분들은 일급 객체 → 클로저 순으로 보시면 좋을 것 같습니다.
2021.07.23 - [iOS/Swift] - [Swift] 일급 객체(First-class citizen)
2021.07.26 - [iOS/Swift] - [Swift] 클로저(Closure)에 대해 알아보자
오늘 준비한 내용은 여기까지 입니다! (__)