Language/Swift

[Swift Basic] 함수 고급

박땅콩 2022. 7. 25.
728x90

본 내용은 야곰님의 Swift 기본문법 강좌를 듣고 개인적으로 학습하여 정리한 내용입니다. 

 

 

목차

 

  • 매개 변수 기본값
  • 전달 인자 레이블
  • 가변 매개 변수
  • 데이터 타입으로서 함수

 

 

✅  매개 변수 기본값

 

 

Swift는 C++에서 처럼 매개 변수 기본값이 존재합니다.

매개 변수 기본값은 아래와 같은 형태로 함수를 작성합니다.

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

 

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

 

그리고 이렇게 매개 변수 기본값을 가지는 함수는 함수 호출 시 생략할 수 있습니다.

예를 들면

// 매개 변수 기본값 함수
func sumeAB(a : Int, b : Int, human : String = "peanut) -> Void {
	print("\(human) 이 총합을 계산했습니다.")
    return a + b
}

// 함수 호출
sumeAB(a : 10, b: 7) // peanut 이 총합을 계산했습니다.
sumAB(a : 17, b : 5, human : "재구")

 

3번째 매개 변수가 기본값이면 해당 함수 호출 시 3번째 매개 변수를 생략하고 호출할 수 있습니다.

만약 기본값인 매개 변수를 변경하고 싶다면? 9번째 줄과 같이 human 명시 후 값을 넘겨주면 됩니다.

 

 

 

✅  전달 인자 레이블

 

 

함수를 호출할 때 매개 변수의 역할을 좀 더 명확히 하거나, 함수 사용자로서 매개 변수가 매개 변수가 어떤 역할을 할건지를 명확히 표현하고자할때 사용합니다.

 

사용방법은

매개 변수 이름 앞에 전달 인자 레이블을 명시해줍니다.

형태는 아래와 같습니다.

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

 

예시 )

func printHelloBye(in hello : String, out bye : String) {
	// 매개 변수 이름 사용
	print("들어올 때는 \(hello) 나갈때는 \(bye)")
}

printHelloBye(in : "안녕하세요", out : "안녕히계세요") // 전달 인자 레이블 사용

 

전달 인자 레이블이용함수정의하면

함수 내부에서는 매개 변수 이름사용합니다. 전달 인자 레이블을 사용할 수 없습니다.

그러나 함수 호출 시에는 매개 변수 이름은 사용하지 못하고 전달 인자 레이블사용할 수 있습니다.

 

그리고 전달 인자 레이블을 사용하면 함수의 중복 정의(오버로딩)을 할 수 있습니다!

함수의 이름과, 매개 변수의 이름과 타입, 반환 타입이 같더라도 전달 인자 레이블이 달라지면 다른 함수로 인식합니다!

 

 

✅  가변 매개 변수

 

 

Swift 5.4 미만 버전에서는 함수당 1개의 가변 인자를 가질 수 있었습니다.

Swift 5.4 이후 버전에서는 함수당 여러개의 가변 인자를 가질 수 있습니다.

 

가변 매개 변수는 아래와 같은 형태로 매개 변수 타입 뒤에 '...' 를 붙여서 사용합니다.

그리고 맨 뒤에 위치하는 것이 좋습니다.

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

 

 

예시 )

func testfunction(to go : String, from location : String..., play todo : String...) {
    print("\(go) -> \(location) -> \(todo)")
}
// 가변 인자 2개 함수 호출
testfunction(to : "peanut", from : "제주도", "부산", "일본", play : "츠케멘먹기", "스노우쿨링하기", "놀이기구타기")
// peanut -> ["제주도", "부산", "일본"] -> ["츠케멘먹기", "스노우쿨링하기", "놀이기구타기"] 출력

testfunction(to: "keria")
// keria -> [] -> [] 출력

 

가변 매개 변수는 함수 내부에서 배열(Array) 형태로 쓰이게 됩니다.

그리고 함수 호출 시 가변 매개 변수에 아무것도 넣지 않아도 에러 없이 컴파일 됩니다.

 

 

✅  데이터 타입으로서 함수

 

 

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

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

또한, 반환 값으로 돌려주는 것도 가능합니다.

 

함수의 타입 표현

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

반환타입은 생략할 수 없습니다.

 

우선, 함수를 상수/변수에 할당하는 코드를 작성해보도록 하겠습니다.

func hellomammmm(name : String, myname : String) {
	print("\(name) 님 안녕하세요? 저는 \(myname) 입니다.")
}

var helloValue : (String, String) -> Void = hellomammmm(name:myname:)
helloValue("Faker", "Peanut")
// Faker 님 안녕하세요? 저는 Peanut 입니다. 출력

 

변수에 함수를 할당할 때 반환 값이 없는 Void 임에도 Void 를 명시해주었습니다.

 

 

두번째로, 함수를 매개 변수를 통해 전달하는 코드를 작성해보도록 하겠습니다.

func otherfunction(y : String, n : String...) {
	print(y)
    print(n)
}

func hellomammmm(name : String, myname : String) {
    print("\(name) 님 안녕하세요? \(myname) 입니다.")
}

func anotherfunction(functions:(String, String) -> Void) {
    functions("peanut", "keria")
}

anotherfunction(functions: hellomammmm(name:myname:))
// peanut 님 안녕하세요? keria 입니다. 출력

// anotherfunction(functions: otherfunction(y:name:)) // Error
// 가변 매개 변수를 가지기 때문에 타입이 다른것으로 봄
728x90

'Language > Swift' 카테고리의 다른 글

[Swift Basic] 함수 기본  (0) 2022.07.25
[Swift Basic] 컬렉션 타입  (0) 2022.07.24
[Swift Basic] Any, AnyObject, nil  (0) 2022.07.23
[Swift Basic] 기본 데이터 타입  (0) 2022.07.23
[Swift Basic] 상수와 변수  (0) 2022.07.23

댓글