[Swift] 04. 함수

·2023년 1월 17일
1

Swift 문법

목록 보기
3/8
post-thumbnail

함수의 기본 형태

Swift에서 함수는 다음과 같은 형태이다.

func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입...) -> 반환타입{
			함수 구현부
            
            return 반환값
}

예를 들어 다음과 같이 쓸 수 있다.

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

참고로 반환값이 없는 경우에는 반환타입 자리에 Void를 써주면 된다.


매개변수와 반환값이 전부 없는 함수는 다음과 같다.

func maximumIntegerValue() -> Void {    // Void 생략 가능
	return Int.max
}

이렇게 만들어준 함수를 호출하는 방법은 다음과 같다.

sum(a: 3, b: 5)
maximumIntegerVlaue()


매개변수에 기본값을 넣는 방법

매개변수에 기본값을 넣어주고 싶다면, 아래와 같은 방법으로 하면 된다.

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

예를 들어 다음과 같이 써줄 수 있다

func greeting(friend: String, me: String = "h") {
	print("hello \(friend)! I'm \(me).")
}

//함수 호출
greeting(friend: "hana") 			//hello hana! I'm h.
greeting(frined: "j", me: "eric")   //hello j! I'm eric.

전달 인자 레이블

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

또한 전달 인자 레이블을 통해 함수를 중복 정의(Overload)할 수 있다. 예를 들어 아래와 같이 아까 선언해주었던 greeting과 똑같은 이름의 함수를 선언해주어도, 'to'와 'from'이라는 전달 인자 레이블을 사용해 중복 정의가 가능하게 된다.


위와 같이 선언된 함수를 호출할 때에는, 전달 인자 레이블을 아래와 같이 사용해야 한다.

greeting(to: "h", from: "j")  // hello h! I'm j.

가변 매개변수

가변 매개변수는 전달 받을 값의 개수를 알기 어려울 때 사용할 수 있으며, 함수당 하나만 가질 수 있다. 예를 들어 아래와 같이 사용한다.

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

print(sayHelloToFriends(me: "h", friends: "gaeun", "yujin"))
//Hello [gaeun, yujin]! I'm h!

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

함수의 타입 표현

Swift는 함수형 프로그래밍 패러다음을 포함하는 다중 패러다임 언어이다. Swift의 함수는 일급객체이므로 변수, 상수 등에 저장이 가능하고, 매개변수를 통해 전달할 수도 있다.
그래서 Swift에서, 함수는 하나의 데이터 타입으로써 표현이 될 수 있다. 표현하려면 아래와 같이 사용해주면 된다.

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

예시는 아래와 같다.

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

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

someFunction = greeting(friend:me:)  // 전달 인자 레이블이 없는 함수를 대입할 경우
someFunction("yujin", "gaeun")

someFunction이라는 변수 자리에 자료형이 String인 매개변수 2개를 가지고 반환값이 없는 함수가 들어올 수 있고, 아까 선언해주었던 greeting을 할당해준 것이다.


그리고 아래와 같이 만들어놨던 sayHelloToFriends 함수같은 경우,
타입이 다르기 때문에 변수에 할당할 수 없다.

인자가 String, String이긴 하지만, 두번째 인자가 가변 매개변수이므로 다른 타입으로 간주된다.



그리고 아래와 같이 함수 타입을 매개변수 타입으로 지정해주면, 아래와 같이 사용 가능하다.




출처

야곰의 스위프트 기본 문법 강좌

0개의 댓글