1. 매개변수 기본 값
매개변수에 기본적으로 전달될 값을 미리 지정해 둘 수 있다!
다만 기본값을 갖는 매개변수는 매개변수 목록 중 뒤쪽에 위치하는 것이 좋다
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값...) -> 반환타입
{
// 함수 구현부
return 반환값
}
예시로 작성해본다면
func greeting(friend: String, me: String = "jjudy")
{
print("Hello \(freind)! I'm \(me)")
}
매개변수 기본 값을 가지는 매개변수는 호출 시 생략할 수 있다
greeting(friend: "hana")
greeting(friend: "john", me: "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: "jjudy")
3. 가변 매개변수
전달 받을 값의 개수를 알기 어려울 때 사용하며, 가변 매개변수는 함수당 하나만! 가질 수 있다
기본 값이 있는 매개변수처럼 가변 매개변수도 매개변수 목록 중 뒤쪽에 위치하는 것이 좋다
func 함수이름(매개변수1이름: 매개변수1타입, 전달인자레이블 매개변수2이름: 매개변수2타입...) -> 반환타입
{
// 함수 구현부
return
}
예시로 작성해보면
func sayHelloToFriends(me: String, friends: String...) -> String
{
return "Hello \(friends)! I'm \(me)!"
}
이런 식으로 사용할 수 있다
print(sayHelloToFriends(me: "jjudy", friends: "hana", "eric", "wing"))
Hello ["hana", "eric", "wing"]! I'm jjudy!
가변 매개변수이기 때문에 이런 식으로도 가능하다
print(sayHelloToFriends(me: "jjudy"))
Hello []! I'm jjudy!
4. 데이터 타입으로서의 함수
스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이다 -> 스위프트의 함수는 일급 객체다!
그래서 함수를 변수, 상수 등에 할당이 가능하고 매개변수를 통해 전달할 수도 있다
일급 객체란 컴퓨터 프로그래밍 언어 디자인에서, 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 인자로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.
또, 반환타입을 생략할 수 없다
(매개변수1타입, 매개변수2타입 ...) -> 반환타입
예시로 작성해보면
var someFunction: (String, String) -> Void = greeting(to:from:)
someFunction("eric", "jjudy")
Hello eric! I'm jjudy
레이블이 아닌 매개변수로도 작성이 가능하다
someFunction = greeting(friend:me:)
someFunction("eric", "jjudy")
Hello eric! I'm jjudy
그러나 타입이 다른 함수는 할당할 수 없다
someFunction = sayHelloToFriends(me:friends:) // 컴파일 오류 발생
someFunction은 Void를 반환, sayHelloToFriends는 String을 반환하기 때문에 오류 발생!
또 다른 예시를 작성해보면
func runAnother(function: (String, String) -> Void)
{
function("jenny", "mike")
}
[string, string을 매개변수로 갖는 function이라는 함수]를 매개변수로 갖는 runAnother라는 함수!
먼가 웃기다 하항
따라서 기존에 작성해놓았던 함수를 응용할 수도 있다
runAnother(function: greeting(friend:me:))
Hello jenny! I'm mike!
function에 greeting(friend:me:)을 할당해서 사용해도 String, String을 매개변수로 사용하기 때문에 문제 없이 사용된다!
runAnother(function: someFunction)
Hello jenny! I'm mike!
someFunction은 greeting(friend:me:)를 할당했기 때문에 매개변수를 표기하지 않아도 jenny, mike가 자동으로 출력되는 것
정리
1. 매개변수 기본값
func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ...) -> 반환타입
{
// 함수 구현부
return 반환값
}
- 매개변수에 기본적으로 전달될 값을 미리 지정해 둘 수 있다
- 기본 값을 갖는 매개변수는 매개변수 목록 중 뒤쪽에 위치하는 것이 좋다
- 기본 값을 갖는 매개변수는 호출 시 생략할 수 있다
2. 전달인자 레이블(Argument Label)
func 함수이름(전달인자레이블 매개변수1이름: 매개변수1타입, 전달인자레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입
{
// 함수 구현부
return
}
- 함수를 호출할 때 함수 사용자의 입장에서 매개변수의 역할을 좀 더 명확하게 표현하고자 할 때 사용
- 전달인자 레이블을 변경해서 동일한 이름의 함수를 중복으로 생성할 수 있다!
- 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용한다
- 함수를 호출할 때는 전달인자 레이블을 사용한다
3. 가변 매개변수
func 함수이름(매개변수1이름: 매개변수1타입, 전달인자레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입
{
// 함수 구현부
return
}
- 전달 받을 값의 개수를 알기 어려울 때 사용하며, 가변 매개변수는 함수당 하나만 가질 수 있다
- 기본값이 있는 매개변수와 같이 가변 매개변수 역시 매개변수 목록 중 뒤쪽에 위치하는 것이 좋다
- 반환값이 없는 함수, 매개변수 기본 값, 전달인자 레이블, 가변 매개변수 등 모두 섞어서 사용이 가능하다
4. 데이터 타입으로서의 함수
(매개변수1타입, 매개변수2타입 ...) -> 반환타입
var someFunction: (String, String) Void = anyFunction(a:b:)
func someFunction2(function: (String, String) -> Void)
{
function("A", "B")
}
- 함수를 변수, 상수 등에 할당이 가능하고 매개변수를 통해 전달할 수도 있다
- 반환 타입을 생략할 수 없다
2022.02.23 - [Study/Swift_BoostCourse_Basic] - iOS 프로그래밍을 위한 스위프트 기초
iOS 프로그래밍을 위한 스위프트 기초
다음과 같이 연재되는 포스트는 부스트코스에서 야곰님의 'iOS 프로그래밍을 위한 스위프트 기초' 강좌를 수강한 후 작성한 기록입니다. 부스트코스에서 야곰님의 'iOS 프로그래밍을 위한 스위프
jjudy99.tistory.com
'[Non-Updated] iOS > Swift_BoostCourse_Basic' 카테고리의 다른 글
[Swift_BoostCourse_Basic] CH 1_10. 반복문 (0) | 2022.03.02 |
---|---|
[Swift_BoostCourse_Basic] CH 1_09. 조건문 (0) | 2022.02.25 |
[Swift_BoostCourse_Basic] CH 1_07. 함수 기본 (0) | 2022.02.24 |
[Swift_BoostCourse_Basic] CH 1_06. 컬렉션 타입(Array, Dictionary, Set) (0) | 2022.02.24 |
[Swift_BoostCourse_Basic] CH 1_05. Any, AnyObject, nil (0) | 2022.02.23 |