함수 고급

·2022년 7월 16일

Swift 기초문법

목록 보기
8/11
  1. 기본값을 갖는 매개변수는 매개변수 목록 중에 뒤쪽에 위치하는 것이 좋다.
func 함수명 (매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ... ) -> 반환타입 {
	함수 구현부
    return 반환값
}

func greeting(friend: String, me: String = "hyun") {
	print("Hello \(friend)! I'm \(me)")
}
  1. 매개변수 기본값을 가지는 매개변수는 생략 가능
greeting(friend: "haha") // Hello haha! I'm hyun
greeting(friend: "soso", me: "vela") // Hello soso! I'm vela
  1. 전달인자 레이블
  • 함수를 호출할 때 매개변수의 역할을 좀 더 명확하게 하거나, 함수 사용자의 입장에서 표현하고자 할 때 사용한다.
  • 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용한다
func 함수명 (전달인자 레이블 매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ... ) -> 반환타입 {
	함수 구현부
    return 
}

//예시
func greeting(to friend: String, from me: String) {
	print("Hello \(friend)! I'm \(me)")
}
함수의 중복정의도 가능하다! to~ from 전달인자 레이블을 사용해
이전에 썼던 greeting이라는 함수명과 같은 이름을 갖고 있지만,
다른 이름을 가진 효과를 낼 수 있다. greetin to~ from까지 이름이 됨
  1. 함수를 호출할 때에는 전달인자 레이블을 사용해야한다.
greeting(to: "hyun", from "jina") // Hello hyun! I'm jina
  • 내부에서는 매개변수를, 외부에서 호출할 때는 전달인자 레이블을!
  1. 가변 매개변수 (...)
  • 전달 받을 값의 개수를 알기 어려울 때 사용.
  • 가변 매개변수는 함수당 하나만 가질 수 있다.
  • 맨 뒤에 위치하는게 좋다.
매개변수2타입 뒤의 마침표 세 개가 가변 매개변수 역할이다.

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

//예시
func sayHelloToFriends(me: String, friends: String...) -> Striing {
	return "Hello \(friends)! I'm \(me)!"
}

print(SayHelloToFriends(me: "hyun", friends: "jiwoo", "jiwon", "jina"))
// Hello ["jiwoo", "jiwon", "jina"]! I'm hyun!

print(sayHelloToFriends(me: "hyun"))
//Hello []! I'm hyun!

//print(SayHelloToFriends(me: "hyun", friends: ))
이렇게 비워두거나 nil을 넣어 두면 오류가 생긴다. 넘기고 싶지 않다면 위와 같이 생략을 해두자. 
  1. 데이터 타입으로서의 함수
  • 스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어
  • 스위프트 함수는 일급객체이므로 변수, 상수 등에 저장이 가능하고, 매개변수를 통해 전달할 수도 있다!
  1. 함수의 타입 표현
  • 반환 타입을 생략할 수 없다.
  • 타입이 다른 함수는 할당할 수 없다.

func greeting(to friend: String, from me: String) {
	print("Hello \(friend)! I'm \(me)")
}

func sayHelloToFriends(me: String, friends: String...) -> Striing {
	return "Hello \(friends)! I'm \(me)!"
}

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

var someFunction: (String, Strinig) -> Void = greeting(to:from:)
someFunction("jiwoo", "hyun") // Hello jiwoo! I'm hyun

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

//someFunction = sayHelloToFriends(me: friends:)
friends가 String타입이긴 하지만, 가변매개변수이기 때문에 다른 타입으로 취급.

func runAnother(function: (String, String) -> Void {
	function("jenny", "mike")
}

runAnother(function: greeting(friend:me:)) // 함수를 직접 만들어 주거나
//Hello jenny! I'm mike

runAnother(function: someFunction) // 기존 함수를 매개변수로 넘겨 주거나
// Hello jenny! I'm mike
)
profile
어?머지?

0개의 댓글