[야우쓰] 1주차(2) 함수 기본&고급

hello_hidi·2022년 11월 11일
0

야우쓰

목록 보기
2/20
post-thumbnail

함수 기본

함수 선언

  • 아래 형식처럼 작성하면 된다.
  • 반환값이 없다면 void를 반환하거나 생략이 가능하다.
  • 매개변수가 없으면 그냥 ()로 비워두면 된다.
func 함수이름(매개변수1 이름: 매개변수1 타입 ...) -> 반환타입 {
	/*함수 구현부*/
   return 반환값
}

func sum(a: Int, b: Int) -> Int {
	return a+b
}

//2) 반환값이 없을때
func sayHello(hello: String) -> Void {
	print(hello)
}
func sayHello(hello: String){
	print(hello)
}

//3) 매개변수가 없을때
func sayHello() { print("say Hello")

함수 고급

기본값 설정

  • Swift에서는 함수 매개변수에 기본값을 미리 설정할 수 있다.
  • 이때 기본값을 넣는 매개변수는 맨 뒤로 빼주면 된다.
  • 기본값을 설정해둔 매개변수에 값을 새로 넣으면, 새로 넣은 값으로 호출이 되지만 값을 따로 넣지 않으면 기본값으로 호출이 된다!
  • 매개변수 기본값을 가지는 매개변수는 호출 시 생략 가능하다!
func greeting(friend: String, me: String = "hidi") {
	print("Hello \(friend)! I'm \(me)")
}

greeting(friend: "hana") // Hello hana! I'm hidi
(friend: "john", me: "eric") // Hello john! I'm eric

Argument Label(전달인자 레이블)

  • 함수 내부에서 쓰는 이름과, 호출할 때 쓰는 이름을 분리할 때 사용한다.
  • Swift에서는 언어 자체의 표현력을 중요시 하는 언어라, 사용자 입장에서 더 알아보기 쉽도록 "전달인자 레이블" 기능을 제공
  • 조금 더 가독성이 좋게 하기 위해 전달인자 레이블을 사용하는 것도 좋은 방법이다!
// 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용한다.
func greeting(to friend: String, from me: String) {
	print("Hello \(friend)! I'm \(me)")
}

// 함수를 호출할 때에는 전달인자 레이블을 사용해야 한다.
greeting(to: "hana", from: "pig") // Hello hana! I'm pig

Variadic Parameters(가변 매개변수)

  • 함수 파라미터 개수를 정적으로 정하지 않고 가변적으로 넘길 수 있게 해주는 swift의 문법
  • 가변 매개 변수는 함수 내부에서 array 형태로 쓰이게 된다.
  • 가변 매개 변수로 사용하고자 하는 매개변수 타입의 뒤에 '...'를 붙여서 사용한다.
  • 함수에서 1개만 사용가능하며, 0개가 올 수도 있고, 여러개가 올 수도 있다.
// array처럼 사용
func printNumbers(_ numbers: Int...) {
    for number in numbers {
        print(number)
    }
}
printNumbers(0, 1, 2, 3, 4, 5)
/*결과
0
1
2
3
4
5
*/

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

print(sayHelloToFriends(me: "apple", friends: "hana", "eric", "wing")) // Hello ["hana", "eric", "wing"]! I'm apple!

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

일급 객체

공식문서를 살펴보면 Swift에서 함수는 일급 객체이기 대문에, 함수를 변수, 상수, 매개변수에 넣을 수 있다고 합니다!! 그럼 일급 객체는 무엇일까요???

일급 객체 조건

  • 함수의 실질적인 매개변수(인자값)이 될 수 있다.
  • 함수의 반환값이 될 수 있다.
  • 할당의 대상이 될 수 있다.
  • 비교 연산을 적용할 수 있다.
  • 데이터 구조 안에 저장할 수 있어야 한다.

일급 객체는 위의 조건들을 만족하면 일급 객체라 부를 수 있습니다.
대표적인 예시로 변수가 있습니다. 변수는 매개변수, 반환값, 값 대입 모두가 가능하자나요!!
그리고 함수도 일급객체입니다!!

일급객체로서의 함수

1. 함수의 할당

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

// 새로운 함수에 기존 함수를 대입해서
var someFunction: (String, String) -> Void = greeting(to:from:)
// 바로 함수 형태로 사용하고 있는 것을 볼 수 있다!
someFunction("eric", "apple")

2. 함수의 매개변수 & 함수값 반환

let f:(Data) -> Void { }

// 함수를 매개변수로 사용한 예시
func doSometing(withData data: Data.action: (Data) -> Void) {
	action(data)
}

doSomething(data, action)

// 함수의 반환값으로 함수를 사용할 수 있다.
func getClosure() -> (Data) -> Void {
	return f
}
profile
안뇽희디

0개의 댓글