본문 바로가기
etc/Swift

함수 고급

by IT learning 2021. 5. 16.
728x90

 

오늘은 함수 (고급)에 대해 알아보았다.

 

매개변수 기본값

매개변수에 기본적으로 들어가는 값을 미리 지정할 수 있다.

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

// 매개변수 기본값을 가지는 매개변수는 생략할 수 있습니다.
greeting(friend: "ITlearning")
//greeting(friend: "Jhon", me: "eric")

매개변수 이름 뒤에 원하는 기본값을 추가해 놓으면, 아래의 함수 실행문에  friend의 매개변수만 추가해주고, me에는 미리 지정해놓은 단어가 추가 될 수 있다.

미리 지정해놨다고 그것만 사용이 가능한것은 아니다. 주석처리된 문장처럼 원하는 단어를 추가해주면 넣은 단어로 바뀌게 된다.

 

전달인자 레이블

전달인자 레이블은 함수를 호출할 때 매개변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용한다.

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

// 함수를 호출할 때는 전달인자 레이블을 사용해야 한다.
greeting(to: "haha", from: "ITlearning")

일종의 별명 이라고 보면된다. 전달인자 레이블로 지정한 키워드로 함수를 호출 할 수 있고, 전달인자 레이블을 선언했다면 전달인자 레이블로만 함수를 호출 할 수 있다.

 

가변 매개변수

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

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

print(sayHelloToFriends(me: "ITlearning", friends: "haha", "mic", "wing"))
print(sayHelloToFriends(me: "Itlearning"))

위의 코드와 같이 friends에 해당될 단어들이 많다면 ...으로 처리해주고, 호출을 할때 여러개를 포괄적으로 호출할 수 있다.

필요하지 않을경우엔 생략이 가능하다.

 

데이터 타입으로서의 함수

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

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

someFunction = greeting(friend:me:)
someFunction("Eric", "ITlearning")

// 타입이 다른 함수는 할당할 수 없습니다.
// someFunction = sayHelloToFriends(me: friends:)
// friends가 가변 매개변수이기 때문에 타입이 달라 할당할 수 없다.

someFunction에 greeting함수를 전달했고, 함수를 호출하는 모습이다.

3번째 줄의 코드 또한 someFunction에 다른 greeting을 전달하는 모습이다.

 

그러나 주석처리된 코드는 이루어질 수 없다. 왜냐하면 타입이 다른 함수는 할당할 수 없기 때문이다. friends가 가변 매개변수이기 때문에 타입이 달라 할당할 수 없다.

 

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

// Hello jenny! I'm mike
runAnother(function: greeting(friend:me:))

// Hello jenny! I'm mike
runAnother(function: someFunction)

위 코드는 String,String 으로 이루어진 함수를 반환값이 없는 상태로 실행한다. 라는 의미이다.

따라서 runAnother 함수를 실행할때 조건에 부합하는 함수인 greeting을 전달했고, 각 매개변수에 단어들이 들어가게 된다.

마지막 줄 코드도 최근에 만든 someFunction 함수를 넣어 실행시키는 코드이다.

728x90

'etc > Swift' 카테고리의 다른 글

반복문  (0) 2021.05.16
조건문  (0) 2021.05.16
함수 기본  (0) 2021.05.13
컬렉션 타입  (0) 2021.05.11
Any,AnyObject,nil  (0) 2021.05.05

댓글

IT_learning's Commit