大器晩成

함수의 표기법(시그니처 표기법) 본문

iOS/Swift 문법

함수의 표기법(시그니처 표기법)

zerobugpark 2024. 11. 8. 00:15


함수의 실행문이 아닌, 함수를 지칭하는 방법입니다.

// 함수 정의문
func doSomething() {
    print("doSomeThing")
}

// 함수 정의문
func addFunction(_ firstNum: Int, _ secondNum: Int) {
    let sum = firstNum + secondNum
    print(sum)
}

//함수 실행문
addFunction(3, 10)

 

함수의 표기법이 왜 필요할까요?

  • 개발자 문서를 읽을 때 필요
  • 함수를 지칭할 때 필요(함수를 변수에 담거나)

함수의 표기법(함수를 지칭 시)

// 1) 파라미터가 없는 경우, ()를 삭제
doSomething // (함수를 가르키는 것. 즉, 함수를 변수에 담을 수 있다.)
var some = doSomething
some()

// 2) 아규먼트 레이블이 있는 경우, 아규먼트 레이블까지를 함수의 이름으로 봄
numberPrint(n:)        //  "numberPrint n 함수이다."

// 3) 파라미터가 여러개인 경우, 콤마없이 아규먼트이름과 콜론을 표기
chooseStepFunction(backward:value:) chooseStepFunction backward value 함수이다.

// 4) 아규먼트 레이블이 생략된 경우
addPrintFunction(_:_:)

--------------------------------------------------
#1 예제
func doSomething() {
    print("A")
}

var some = doSomething
some() // 출력: A
  • ()를 붙이는 것은 파라미터가 없는 함수를 호출하는 것이기 때문에, 함수표기법에선 ()를 없애야 합니다.
  • 아규먼트레이블이 있는 경우 아규먼트 레이블과 콜론을 작성해서 함수를 표기합니다.

 

함수 타입의 표기

  • 함수 타입은 다음과 같은 형태로 나타낸다. "(Parameter Type) -> Return Type"
  • 함수를 정의할 때 반환 타입이 없으면 반환 타입을 생략할 수 있지만, 함수 타입에서는 생략할 수 없다.

 

매개변수, 리턴타입이 모두 존재하지 않는 함수 타입(Void)

func noParameter() {}
noParameter //함수 타입은: () -> ()
  • 매개변수, 리턴타입이 모두 존재하지 않는 함수는 빈 괄호()로 타입을 표기

매개변수가 1개 이상 존재하는 함수 타입

#1 매개변수가 1개 이상 존재하는 함수의 타입
func numberPrint(n num: Int) {}
//함수 표기법
numberPrint(n:) // 함수의 타입은: (Int) -> ()
var function1: (Int) -> () = numberPrint(n:)

#2 매개변수가 2개 이상 존재하는 함수의 타입
func addPrintFunction(_ firstNum: Int, _ secondNum: Int, thirdNum: Int) {}
//함수 표기법
addPrintFunction(_:_:thirdNum:) //함수의 타입은 (Int, Int, Int) -> ()
var function2: (Int, Int, Int) -> () = addPrintFunction(_:_:thirdNum:)
  • 함수의 타입을 확인하기 위해, 함수 표기법을 통해 선언합니다.
  • 함수의 타입은 해당 매개변수의 자료형 타입(Data Type)만을 작성합니다.
  • 전달인자(Argument Label), 파라미터 네임(Prarmeter Name)의 유무는 고려하지 않습니다.
  • '어떠한 자료형 타입을 매개변수로 가지고 있는가?'에 대한 응답만 필요로 한다.

매개변수와 리턴타입이 존재하는 함수 타입

func calc(number: Int, count: Int) -> Int {
    return number * count
}
//함수 표기법
calc(number:count:) // 함수의 타입은: (Int, Int) -> Int
var function3: (Int, Int) -> Int = calc(number:count:)
  • 매개변수 이외, 리턴(Return 타입)'이 존재하는 함수의 경우 리턴 타입 또한, 해당 자료형 타입(Data Type)을 작성합니다.

함수 타입 사용 예시

func hello() {
    print("안녕하세요")
}

func hello(name: String) {
    print("안녕하세요 \(name)")
}

//let meet = hello   // 같은 이름의 함수일 경우 판단할 수 없기 때문에 오류가 발생 
let meet2:() -> () = hello //타입 어노테이션
let meetHongGilDong = hello(name:) //함수 식별자

----------------------------------------------------------------------

func calc(number: Int, count: Int) -> Int {
    return number * count
}
//함수 표기법
calc(number:count:) // 함수의 타입은: (Int, Int) -> Int
var function3: (Int, Int) -> Int = calc(number:count:)
var function4: = calc  //calc라고 정의된 함수가 한개 뿐이기 때문에 에러가 발생하지는 않는다.

 

함수  시그니처

함수 시그니처(Function Signature)는 함수의 고유한 식별 정보를 나타내는 표현이다. 시그니처는 함수가 호출될 때의 입력(매개변수)과 출력(반환 타입)을 포함하며, 함수의 이름과 매개변수의 레이블도 함께 포함될 수 있다.

  • 기본적으로 함수이름(매개변수: 매개변수타입) -> 반환타입 형태로 표기된다.
  • 매개변수의 레이블과 타입, 반환 타입이 포함된다.
  • 함수 시그니처에는 "함수이름", 매개변수의 개수 및 타입", 반환 타입이 포함된다.
  • 매개변수 이름 자체는 시그니처에 포함되지 않으며, 아규먼트 레이블은 시그니처의 일부로 간주된다.

일반함수

//함수
func add(a: Int, b: Int) -> Int {
    return a + b
}

//함수 시그니처
add(a:b:) -> Int
  • add는 함수 이름.
  • a:b:는 아규먼트 레이블.
  • -> Int는 반환 타입.

중요한 점

함수 시그니처는 함수 오버로딩을 가능하게 하는 중요한 요소입니다. 두 함수가 같은 이름을 갖더라도 매개변수의 타입이나 개수 등이 다르면 서로 다른 시그니처로 구분됩니다.

 

함수 시그니처의 예시 비교

func multiply(a: Int, b: Int) -> Int
func multiply(x: Double, y: Double) -> Double

이 함수들은 같은 이름을 갖지만 매개변수의 타입이 다르기 때문에 시그니처가 다릅니다.

  • multiply(a:b:) -> Int
  • multiply(x:y:) -> Double

이렇게 함수 시그니처는 함수의 고유한 정의를 식별할 수 있게 도와줍니다.

 

 

 

728x90

'iOS > Swift 문법' 카테고리의 다른 글

Swift 제어전송문  (0) 2024.11.08
함수의 오버로딩  (1) 2024.11.08
함수의 주의점  (3) 2024.11.08
함수의 활용  (0) 2024.11.07
함수(Function)  (0) 2024.11.07