본 내용은 야곰님의 Swift 기본문법 강좌를 듣고 개인적으로 학습하여 정리한 내용입니다.
목차
- 매개 변수 기본값
- 전달 인자 레이블
- 가변 매개 변수
- 데이터 타입으로서 함수
✅ 매개 변수 기본값
Swift는 C++에서 처럼 매개 변수 기본값이 존재합니다.
매개 변수 기본값은 아래와 같은 형태로 함수를 작성합니다.
func 함수이름(매개변수1이름 : 매개변수1타입, 매개변수2이름 : 매개변수2타입 = 매개 변수 기본값) -> 반환타입 {
/* 함수 구현부 */
return 반환값
}
기본값을 가지는 매개 변수는 매개 변수 목록 중 뒷쪽에 위치하는 것이 좋습니다.
그리고 이렇게 매개 변수 기본값을 가지는 함수는 함수 호출 시 생략할 수 있습니다.
예를 들면
// 매개 변수 기본값 함수
func sumeAB(a : Int, b : Int, human : String = "peanut) -> Void {
print("\(human) 이 총합을 계산했습니다.")
return a + b
}
// 함수 호출
sumeAB(a : 10, b: 7) // peanut 이 총합을 계산했습니다.
sumAB(a : 17, b : 5, human : "재구")
3번째 매개 변수가 기본값이면 해당 함수 호출 시 3번째 매개 변수를 생략하고 호출할 수 있습니다.
만약 기본값인 매개 변수를 변경하고 싶다면? 9번째 줄과 같이 human 명시 후 값을 넘겨주면 됩니다.
✅ 전달 인자 레이블
함수를 호출할 때 매개 변수의 역할을 좀 더 명확히 하거나, 함수 사용자로서 매개 변수가 매개 변수가 어떤 역할을 할건지를 명확히 표현하고자할때 사용합니다.
사용방법은
매개 변수 이름 앞에 전달 인자 레이블을 명시해줍니다.
형태는 아래와 같습니다.
func 함수이름(전달인자레이블 매개변수1이름 : 매개변수1타입, 전달인자레이블 매개변수2이름 : 매개변수2타입 ...) -> 반환 타입 {
/* 함수 구현부 */
return 반환값
}
예시 )
func printHelloBye(in hello : String, out bye : String) {
// 매개 변수 이름 사용
print("들어올 때는 \(hello) 나갈때는 \(bye)")
}
printHelloBye(in : "안녕하세요", out : "안녕히계세요") // 전달 인자 레이블 사용
전달 인자 레이블을 이용해 함수를 정의하면
함수 내부에서는 매개 변수 이름을 사용합니다. 전달 인자 레이블을 사용할 수 없습니다.
그러나 함수 호출 시에는 매개 변수 이름은 사용하지 못하고 전달 인자 레이블을 사용할 수 있습니다.
그리고 전달 인자 레이블을 사용하면 함수의 중복 정의(오버로딩)을 할 수 있습니다!
함수의 이름과, 매개 변수의 이름과 타입, 반환 타입이 같더라도 전달 인자 레이블이 달라지면 다른 함수로 인식합니다!
✅ 가변 매개 변수
Swift 5.4 미만 버전에서는 함수당 1개의 가변 인자를 가질 수 있었습니다.
Swift 5.4 이후 버전에서는 함수당 여러개의 가변 인자를 가질 수 있습니다.
가변 매개 변수는 아래와 같은 형태로 매개 변수 타입 뒤에 '...' 를 붙여서 사용합니다.
그리고 맨 뒤에 위치하는 것이 좋습니다.
func 함수이름(매개변수1이름 : 매개변수1타입, 매개변수2이름 : 매개변수2타입..., 매개변수3이름 : 매개변수3타입...) -> 반환타입 {
/* 함수구현부 */
return 반환값
}
예시 )
func testfunction(to go : String, from location : String..., play todo : String...) {
print("\(go) -> \(location) -> \(todo)")
}
// 가변 인자 2개 함수 호출
testfunction(to : "peanut", from : "제주도", "부산", "일본", play : "츠케멘먹기", "스노우쿨링하기", "놀이기구타기")
// peanut -> ["제주도", "부산", "일본"] -> ["츠케멘먹기", "스노우쿨링하기", "놀이기구타기"] 출력
testfunction(to: "keria")
// keria -> [] -> [] 출력
가변 매개 변수는 함수 내부에서 배열(Array) 형태로 쓰이게 됩니다.
그리고 함수 호출 시 가변 매개 변수에 아무것도 넣지 않아도 에러 없이 컴파일 됩니다.
✅ 데이터 타입으로서 함수
Swift는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어로, 스위프트 함수는 일급 객체입니다.
그래서 함수를 상수 또는 변수에 할당이 가능하고 매개 변수를 통해 전달 할 수 있습니다.
또한, 반환 값으로 돌려주는 것도 가능합니다.
함수의 타입 표현
(매개변수1타입, 매개변수2타입 ...) -> 반환타입
반환타입은 생략할 수 없습니다.
우선, 함수를 상수/변수에 할당하는 코드를 작성해보도록 하겠습니다.
func hellomammmm(name : String, myname : String) {
print("\(name) 님 안녕하세요? 저는 \(myname) 입니다.")
}
var helloValue : (String, String) -> Void = hellomammmm(name:myname:)
helloValue("Faker", "Peanut")
// Faker 님 안녕하세요? 저는 Peanut 입니다. 출력
변수에 함수를 할당할 때 반환 값이 없는 Void 임에도 Void 를 명시해주었습니다.
두번째로, 함수를 매개 변수를 통해 전달하는 코드를 작성해보도록 하겠습니다.
func otherfunction(y : String, n : String...) {
print(y)
print(n)
}
func hellomammmm(name : String, myname : String) {
print("\(name) 님 안녕하세요? \(myname) 입니다.")
}
func anotherfunction(functions:(String, String) -> Void) {
functions("peanut", "keria")
}
anotherfunction(functions: hellomammmm(name:myname:))
// peanut 님 안녕하세요? keria 입니다. 출력
// anotherfunction(functions: otherfunction(y:name:)) // Error
// 가변 매개 변수를 가지기 때문에 타입이 다른것으로 봄
'Language > Swift' 카테고리의 다른 글
[Swift Basic] 함수 기본 (0) | 2022.07.25 |
---|---|
[Swift Basic] 컬렉션 타입 (0) | 2022.07.24 |
[Swift Basic] Any, AnyObject, nil (0) | 2022.07.23 |
[Swift Basic] 기본 데이터 타입 (0) | 2022.07.23 |
[Swift Basic] 상수와 변수 (0) | 2022.07.23 |
댓글