카테고리 없음

함수 표기법(지칭), 함수의 타입의 표기

가애야 2024. 12. 27. 15:38

함수 표기법(지칭)

함수를 지칭하는 방법

// 정의문
func doSomething() {
    print("출력")
}


func addPrintFunction(_ firstNum: Int, _ secondNum: Int) {
    print(firstNum + secondNum)
}


// 실행문

numberPrint(n: 3)

 

함수를 지칭하려는 경우, 함수를 어떻게 표기할까?

 - 1) 개발자 문서를 읽을 때 필요

 - 2) 함수를 지칭할때 필요(함수를 변수에 담거나)

 

 

함수의 표기법(함수를 지칭시) - 함수를 가르킴 (함수를 실행하는것 아님)

 

1) 파라미터가 없는 경우, ()를 삭제

doSomething

 

 

2) 아규먼트 레이블이 있는 경우, 아규먼트 레이블까지를 함수의 이름으로 봄

numberPrint(n:)        //  "numberPrint n 함수이다."

 

3) 파라미터가 여러개인 경우, 콤마없이 아규먼트이름과 콜론을 표기

chooseStepFunction(backward:value:)

 

4) 아규먼트 레이블이 생략된 경우, 아래와 같이 표기

addPrintFunction(_:_:)

 

 

 

함수 타입의 표기

함수의 자료형을 표현하는 방법

// 변수에 정수를 저장하는 경우에 타입 표기

var num: Int = 5


// 함수의 타입 표기 방법

var function1: (Int) -> () = numberPrint(n:)

var function2: (Int, Int) -> () = addPrintFunction(_:_:)

 

() -> ()

() -> Void

(String) -> String

(Int, Int) -> ()

(Int, Int) -> Void

 

* 위의 기호들을 봤을 때, 함수 타입이라는 것을 바로 알아차려야 한다.

 

 

 

함수의 오버로딩(overloading)

오버로드(overload): 영어로 과적하다라는 뜻

 

같은 이름의 함수에 매개변수(파라미터)를 다르게 선언하여, 하나의 함수 이름에 실제 여러개의 함수를 대응 시키는 것

===> 쉽게말하면: 함수의 이름의 재사용

 

스위프트는 오버로딩을 지원하는 언어

⭐️ 함수이름, 파라미터 수/자료형, 아규먼트 레이블, 리턴형을 모두포함해서 함수를 식별

func doSomething(value: Int) {
    print(value)
}


func doSomething(value: Double) {
    print(value)
}


func doSomething(value: String) {
    print(value)
}


func doSomething(_ value: String) {
    print(value)
}


func doSomethging(value1: String, value2: Int) {
    print(value1, value2)
}




doSomething(value: 5)

doSomething(value: 3.4)

doSomething(value: 3)

아하.. 아하! 함수이름은 다 달라야되는줄 알았는데 생각해보니 맞네.. 스위프트는 이미 오버로딩 사용하는 함수가 많았네..

생각해보니 당연하게 쓰던것들 많음..ㅋ

 

오버로딩을 지원하지 않는 언어의 단점

- 같은 기능을 제공하는 함수를 파라미터 형식마다 이름을 다르게 구현해야하기 때문에 함수의 이름이 많아지고, 구별해서 사용하는 것이 어렵다.

 

실제 애플에서 만들어놓은 함수들에도 오버로딩을 사용한 함수들이 많음!