[Swift]함수란

김태형·2023년 3월 19일
0

Swift

목록 보기
8/22

이번 글은 함수에 대해서 다뤄볼 예정이다. 함수는 작업의 가장 작은 단위이자 하나의 작은 프로그램으로, 기본적으로 메서드와 같다고 생각하면 된다.



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

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

//기본값을 가지는 매개변수는 생략 가능함 !
greeting(friend: "hana") //Hello hana! I'm yagom
greeting(friend: "john", me: "eric") //Hello john! I'm eric

전달인자 레이블

  • 함수를 호출할 때 매개변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용
    - 전달인자 레이블이 있으면, 함수의 이름이 같아도 다른 함수로 취급받을 수 있음
  • 매개변수 이름조차 쓰기 싫을 때는 _를 사용하면 된다

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


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

//함수 호출 시 전달인자 레이블을 사용
greeting(to: "hana", from: "yagom") //Hello hana! I'm yagom

//중요! greeting이라는 함수를 위에서도 선언하였지만, 전달인자 레이블을 통해 함수의 이름 자체가 바뀐 효과를 얻을 수 있음!
//스위프트에서는 greeting &&to &&from까지 함수의 이름으로 취급되어 위의 함수와 다른 함수로 취급됨


//매개변수 이름조차 쓰기 싫을 때는 _를 사용하면 된다
func myFunctionThird(_ name: String) -> String {
    return "안녕하세요? \(name)입니다!"
}

myFunctionThird("Ted")  //매개변수 이름 선언 없이도 잘 동작한다.

가변 매개변수

  • 매개변수가 몇 개가 들어올지 모를 때 사용
  • 0개 이상의 값을 받아올 수 있음
  • 인자 값은 배열처럼 사용할 수 있음
  • 함수마다 하나의 가변 매개변수를 가질 수 있음
  • ...은 띄어쓰면 안됨
//가변 매개변수

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


func sayHelloToFriends(me: String, friends: String...) -> String {   //friends의 값이 몇 개인지 모를 때 사용
	return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFriends(me: "yagom", friends: "hana", "eric", "wing"))  //Hello ["hana", "eric", "wing"]! I'm yagom!
print(sayHelloToFriends(me: "yagom")   //Hello []! I'm yagom!

함수의 타입표현

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


//함수 호출 시 전달인자 레이블을 사용
greeting(to: "hana", from: "yagom") //Hello hana! I'm yagom

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

var someFunction: (String, String) -> Void = greeting(to:from:)    //반환값이 없는 String 타입의 매개변수 2개가 greeting이라는 함수에 들어가서 새로운 함수 someFunction을 만듦
someFunction("eric", "yagom")   //Hello eric! I'm yagom!

someFunction = greeting(friend:me:)    //위에 있는 greeting과는 다른 함수!!
someFunction("eric", "yagom")   //Hello eric! I'm yagom



//함수 타입을 매개변수 타입으로 지정을 해주고 실행 가능 !
func runAnother(function: (String, String) -> Void) {
	function("jenny", "mike")
}   //String type 2개를 매개변수로 가지는 함수가 function의 매개변수 타입

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


[출처] 스위프트 프로그래밍 (야곰), 야곰의 스위프트 기초문법 강좌, 개발하는 정대리 스위프트 강좌

0개의 댓글