함수 고급

손호준·2022년 6월 8일
0

swift

목록 보기
2/12

매개변수 기본 값

매개변수에 기본적으로 전달될 값을 미리 지정할 수 있음. 기본값을 갖는 매개변수는 매개변수 목록 중에 뒤쪽에 위치하는 것이 좋음.

func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값...) -> 반환타입 {
	/*함수구현부*/
	return 반환값
}
//eg.1//
func greeting(friend: String, me: String = "nylonmask") {
print("Hello \(friend)! I'm \(me)")
}
//eg.2. 매개변수의 기본값을 가지는 매개변수는 생략 가능//
greeting(friend: "hana")//Hello hana! I'm nylonmask
greeting(friend: "john", me: "eric") //Hello john! I'm eric

전달인자 레이블

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

//함수 내부에서 전달인자를 사용할 때, 매개변수 이름을 사용//
func greeting(to friend: String, from me: String) {
	print(Hello \(friend)! I'm \(me)")

//함수를 호출할 때에는 전달인자 레이블을 사용//
greeting(to: "hana", from: "nylonmask")

가변 매개변수

전달 받을 값의 개수를 알기 어려울 때 사용. 가변 매개변수는 함수당 하나만 가질 수 있음.

//eg.1//
func sayHelloToFriends(me: String, friends: String...) -> String {
	return "Hello \(friends)! I'm \(me)"
}
print(sayHelloToFriends(me: "nylonmask", friends: "hana", "eric", "wing"))
//Hello ["hana", "eric", "wing"]! I'm nylonmask
print(sayHelloToFriends(me: "nylonmask")
//Hello []! I'm nylonmask

데이터 타입으로서의 함수

스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이므로, 스위프트의 함수는 일급객체임. 따라서 함수를 변수, 상수 등에 할당 가능하고 매개변수를 통해 전달도 가능

함수의 타입표현

반환타입은 생략불가, 타입이 다른 함수는 할당 불가

//eg.1//
var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction = ("eric", "nylonmask") //Hello eric! I'm nylonmask

someFunction = greeting(friend:me:)
someFunction("eric", "nylonmask") //Hello eric! I'm nylonmask

//eg.2. 타입이 다른함수 할당불가//
someFunction = sayHelloToFriends(me:friends:) // 에러 발생

주의 : 스위프트의 전반적인 문법에서 띄어쓰기를 신경써야함

profile
Rustacean🦀/Data engineer💻

0개의 댓글