Swift랑 친해지기/Swift문법정리

08.함수고급

데브킹덕 2021. 12. 21. 15:25

*이 글은 부스트 코스 야곰님 강좌를 기본으로 공부하며 정리한 글입니다.*

매개변수 

  • 두 개 이상의 변수 사이의 함수 관계를 간접적으로 표시할 때 사용하는 변수.

1. 매개변수 기본 값

 

- 매개변수에 기본적으로 전달된 값을 미리 지정해 둘 수 있습니다. 

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

 

코드로 보기

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

/* 함수 구현부 */

return 반환값

}

 

func greeting( freind : String, me : String = "GD"){

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

}

 

// 매개변수 기본값을 가지는 매개변수는 호출시 생략할 수 있습니다.

greeting(friend:"hana") // Hello hana! I`m GD

greeting(friend:"john",me:"eric") // Hello john! I`m eric

 

2. 전달인자 레이블(Argument Label)

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

- 전달인자 레이블은 변경하여 동일한 이름의 함수를 중복으로 생성가능합니다.

 

코드로 보기

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

{

 /* 함수 구현부 */

return

}

 

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

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

}

 

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

greeting (to : "hana", from : "GD") // Hello hana!I`m GD

 

 

코드 및 전달인자 해석

위에 greeting과 똑같은 매개변수이름과 타입이지만, to와 from전달인자 레이블을 사용해서

함수의 이름 자체가 바뀐 효과를 받아 중복 정의 역할 수행 가능 

greeting으로 같은 함수의 이름을 가진것으로 보이기는 하지만, 스위프트에선 greeting to,from까지 

함수의 이름으로 취급되어 다른함수로 취급이 됨 

함수 외부에서는 to라는 함수 전달인자 레이블을 통하여 함수를 호출하게 되고, 

함수 내부에서는 friend 라는 매개변수 이름을 가지고 매개변수를 사용하게 됩니다.

 

함수외부에서 전달인자의 의미와 함수내부에서의 전달인자의 의미가 상이하거나

사용자 입장에서 전달인자의 역할을 표현하고 싶다면 전달인자레이블을 사용하면 좋다. 

함수 외부에서는 꼭 전달인자 레이블을 사용해야 하고 내부에서는 매개변수 이름을 사용해야 한다.

 

3. 가변 매개변수

- 전달 받을 값의 개수를 알기 어려울 때 사용합니다. 

- 가변 매개변수는 함수당 하나만 가질 수 있습니다.

- 기본값이 있는 매개변수와 같이 가변 매개변수 목록 중 뒤쪽에 위치하는 것이 좋습니다. 

 

코드로 보기

// func 함수이름( 매개변수1이름 : 1타입, 매개변수2이름 : 매개변수2타입...) ->반환타입{

//     /* 함수 구현부 */

//    return 반환값

// }

 

 

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

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

}

 

print(sayHelloToFriends(me : "GD", friends : "hana", "eric", "wing"))

//Hello["hana","eric","wing"]!I`m GD!

 

print(sayHelloToFriends(me:"GD"))

//Hello[]!I`m GD!

 

**반환값이 없는 함수, 매개변수 기본 값, 전달인자 레이블, 가변 매개변수 등 모두 섞어서 사용가능합니다.**

 

4. 데이터 타입으로서의 함수

- 스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중패러다임 언어이므로 스위프트의 함수는 일급객체입니다.

그래서 함수를 변수, 상수 등에 할당이 가능하고 매개변수를 통해 전달할 수도 있습니다.

 

- 함수의 타입 표현: 반환 타입을 생략할 수 없습니다. 

 

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

 

코드로 보기

-함수타입 사용

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

// 2개의 String 타입의 매개변수 가지고 반환값이 없는 greeting이라는 함수someFunction변수에 할당을 해주는 것

someFunction("eric","GD") // Hello eric! I`m GD

 

someFunction = greeting(friends:me:)

someFunction("eric","GD")//Hello eric!I`m GD

 

//someFunction = sayHelloToFriends(me : friends :)

//String 타입이기는 하지만 freinds가 가변매개변수를 가지기 때문에 타입이 달라서 할당 불가능

 

코드로 보기 

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

         function("jenny", "mike")

}

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

//반환값이 없고 String 타입 매개변수 2개를 가지는 함수를 가지는 function이라는 매개변수 타입이다.

 

//Hello jenny! I`m mike

runAnother(function: greeting(friend:me:))        ---->함수를 직접 넘겨줄 수도 있다.

 

//Hello jenny! I`m mike

runAnother(function: someFunction)        -----> 위에 만들어 놨던 변수에 담겨있는 함수를 넘겨줄 수 있다.

 

 

'Swift랑 친해지기 > Swift문법정리' 카테고리의 다른 글

10. 반복문  (0) 2021.12.21
09. 조건문  (0) 2021.12.21
07. 함수기본  (0) 2021.12.02
컬렉션 타입  (0) 2021.12.01
05. Any, AnyObject, nil  (0) 2021.12.01