함수 고급

Swift/문법 2021. 1. 27. 11:56

매개 변수 기본 값

- 기본 값을 갖는 매개 변수는 매개 변수 목록 중에 뒤쪽에 위치하는 것이 좋음

 

func 함수 이름(매개 변수 1 이름: 매개 변수 1 타입, 매개 변수 2 이름: 매개 변수 2 타입 = 매개 변수 기본 값) -> 반환 타입 {

함수 구현부

return 반환 값

}

 

func greeting(friend: String, me: String = "khon") {

print("Hello \ (friend)! I'm \ (me)" )

}

 

* 매개 변수 기본 값을 가지는 매개 변수는 생략할 수 있음

greeting(friend: "khon01")   // Hello khon01! I'm khon

greeting(friend: "khon02", me: "khon03")   // Hello khon02! I'm khon03

 

 

전달 인자 레이블

- 함수를 호출할 때 매개 변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용

- 함수 내부에서 전달 인자를 사용할 때에는 매개 변수 이름을 사용

 

func 함수 이름(전달 인자 레이블 매개 변수 1 이름: 매개 변수 1 타입, 전달 인자 레이블 매개 변수 2 이름: 매개 변수 2 타입) -> 반환 타입 {

함수 구현부

return

}

 

func greeting(to friend: String, from me: String) {   

// to와 from이라는 전달 인자 레이블을 사용해서 함수의 이름 자체가 바뀐 효과를 봤기 때문에 중복 정의로서의 역할을 수행할 수 있음

 

* greeting이라고 같은 이름을 가지고 있는 것으로 보이긴 하지만 실제로 Swift에서는 함수의 이름이 greeting, to, from까지 전부 함수의 이름으로 취급되기 때문에 위의 함수와 다른 취급이 됨

 

print("Hello \ (friend)! I'm \ (me)")

 

함수 내부에서 전달 인자를 사용할 때에는 매개 변수 이름을 사용

func greeting(to friend: String, from me: String) {

print("Hello \ (friend)! I'm \ (me)")

}

 

함수를 호출할 때에는 전달 인자 레이블을 사용해야 함

greeting(to: "khon1", from: "khon2")   // Hello khon1! I'm khon2

 

 

가변 매개변수

- 전달받을 값의 개수를 알기 어려울 때 사용할 수 있음

- 가변 매개 변수는 함수당 하나만 가질 수 있음

 

func 함수 이름(매개 변수 1 이름: 매개 변수 1 타입, 전달 인자 레이블 매개변수 2 이름: 매개 변수 2 타입...) -> 반환 타입 {

함수 구현부

return

}

 

func sayHelloToFriends(me: String, friends: String...) -> String {

return "Hello \ (friends)! I'm \ (me)!"

}

print(sayHelloToFriends(me: "khon"m friends: "khon01", "khon02", "khon03"))

// Hello ["khon01", "khon02", "khon03"]! I'm khon2

 

print(sayHelloToFriends(me: "khon"))   // 가변 인자에 아무 값도 넘기고 싶지 않다면 전달 인자 레이블을 생략하면 됨

// Hello []! I'm khon!

 

 

데이터 타입으로서의 함수

- Swift는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어

- Swift의 함수는 일급 객체이므로 변수, 상수 등에 저장이 가능하고 매개 변수를 통해 전달할 수도 있음

 

 

함수의 타입 표현

- 반환 타입을 생략할 수 없음

- 타입이 다른 함수는 할당할 수 없음

 

(매개 변수 1 타입, 매개 변수 2 타입) -> 반환 타입

 

var someFunction: (String, String) -> Void = greeting(to:from:)

someFuction("khon", "khon01")

// someFunction이라는 변수 생성, 이 변수에 함수가 들어올 거라는 뜻, 매개 변수가 두 개인데 두 개 다 String 타입의 매개 변수를 가지고 반환 값이 없는 함수가 들어올 수 있다고 명시, greeting이라는 함수를 someFunction 변수에 할당

 

someFunction = greeting(friend:me:)

someFunction("khon", "khon01")

 

someFunction = sayHelloToFriends(me: friends: )   

// friends가 가변 매개 변수를 가짐, String 타입이긴 하지만 가변 매개 변수를 가지기 때문에 타입이 다름 이런 함수는 할당을 할 수 없음

 

func runAnother(function: (String, String) -> Void) {

function("khon", "khon5")

}

// 함수 타입을 매개 변수 타입으로 지정해주면 function이라는 매개 변수를 안에서도 실행할 수 있음

 

runAnother(function: greeting(friend:me:))

 

runAnother(function: someFunction)

'Swift > 문법' 카테고리의 다른 글

반복문  (0) 2021.01.27
조건문  (0) 2021.01.27
함수 기본  (0) 2021.01.27
컬렉션 타입  (0) 2021.01.26
Any / Anyobject / nil  (0) 2021.01.25
Posted by khon98
,