본문 바로가기
swift/basic

기본 함수

by 신주봉 2024. 3. 25.

기본 함수 

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

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

 

함수의 반환값이 없다면, Void 형태로 반환하거나 생략이 가능함 ! 

func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> Void{
	/* 함수 구현부 */
}

func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...){
	/* 함수 구현부 */
}

 

함수 호출

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

sum(a: 3, b: 5) // 8

Swift에서는 함수 매개변수에 기본값을 미리 설정해둘 수 있음 !

// 기본값을 넣는 매개변수는 맨 뒤에 위치 !
func test(firstName: String, lastName: String = "jooyong"){
	print("first name : \(fristName), last name : \(lastName)")
}

test(firstName: "shin") // first name : shin, last name : jooyong)
test(firstName: "park", lastName: "bong") // first name : park, last name : bong

 

Swift에서는 언어 자체의 표현력을 중요시 하여,

사용자 입장에서 좀 더 알아보기 쉽도록 전달인자 레이블 기능을 제공함 !

** 전달인자 레이블은 함수 내부에서 쓰는 이름과 호출할 때 쓰는 이름을 분리할 때 사용됨

// 함수 내부에서 전달인자를 사용할 때에는 매개변수 이름을 사용함.
func test(to firstName: String, from lastName: String){
	print("first name : \(fristName), last name : \(lastName)")
}

// 함수를 호출때에는 전달인자 레이블을 사용해야함.
test(to: "shin", from: "jooyong")

 

Swift에서는 전달 받을 값의 갯수를 알기 어려운 상황을 위하여,

가변 매개변수 기능을 제공함.

가변 매개변수는 함수에서 1개만 사용할 수 있음.

가변 매개변수 부분에 데이터가 0개가 들어올 수 있고, 여러개가 들어올 수 있움.

func test(firstName: String, lastName: String...) -> String{
	return "first name : \(fristName), last name : \(lastName)"
}

print(test(firstName: "shin", lastName: "joo","yong","jooyong"))
// firstName : "shin", last name : ["joo","yong","jooyong"]

print(test(lastName: "jooyong:))
// firstName : [], lastName : jooyong

 

Swift에서 함수는 일급 객체(first-class objet)이기 때문에 함수를 변수, 상수, 매개변수에 넣을 수 있음.

 

일급 객체(first-class object)

  1. 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있음
  2. 모든 일급 객체는 함수의 반환값이 될 수 있음
  3. 모든 일급 객체는 할당의 대상이 될 수 있음
  4. 모든 일급 객체는 비교 연산 (==, equal)을 적용할 수 있음

**평소에 자주 쓰고 있던 변수도 모두 일급 객체임 ! 

ex1)
var count = 3
var newCount = 3

count = newCount
sum(count, newCount)


ex2) 함수도 할당 가능
func test(to firstName: String, from lastName: String){
	print("firstName: \(firstName), lastName: \(lastName)")
}

var someFuction: (String, String) -> Void = test(to:from:)
someFuction("shin", "jooyong") // firstName: shin, lastName: jooyong
// 새로운 함수에 기존 함수를 대입하여 바로 함수 형태로 사용될 수 있음 !

 

할당뿐만 아니라, 실질적인 매개변수가 될 수 있움.

또는 함수의 반환값으로 함수를 사용할 수 있움.

let f:(Data) -> Void = { }
func doSomething(withData data: Data, action: (Data) -> Void) {
	action(data)
}

doSomething(data, action)


func getClosue() -> (Data) -> Void {
	return f
}

'swift > basic' 카테고리의 다른 글

조건문, 반복문  (0) 2024.03.25
Any, nill  (0) 2024.03.22
데이터 및 컬렉션 타입  (1) 2024.03.22
swift?  (1) 2024.03.22