iOS/Swift

[Swift] 매개변수 vs 전달인자 (feat. 아규먼트 레이블)

Dev.Andy 2023. 7. 19. 23:59

머리말

함수에서 사용되는 여러 용어

  • 함수를 사용할 때면 매개변수, 전달인자, 인수, 아규먼트 레이블, 파라미터(패러미터), 아규먼트 등 여러 용어가 혼용하여 쓰인다.
  • 특히나 Swift에서는 "아규먼트 레이블(argument label)"이라는 새로운 개념이 있어서 각 용어를 제대로 구분할 필요가 있다.
  • 따라서 관련 용어를 확실하게 구분하기 위해 이번 포스팅을 하게 되었다

참고 자료

 

용어 정리

매개변수(parameter)

  • 함수를 '정의'할 때 쓰이는 변수의 이름 그 자체
  • 이름에 '변수'가 들어간 것을 알 수 있듯이 변수이다
  • 하지만 엄밀히 말하면 Swift에서는 매개변수가 변수가 아니라 상수이다.
  • Swift에서는 매개변수의 값을 직접 변경하고 싶다면 inout이라는 키워드를 써서 값이 아닌 주소로 접근(call by reference)해야 한다.
  • 또는 지역변수로서 새로운 변수(매개변수와 이름이 같아도 상관 없다)를 선언하여 매개변수를 할당할 수도 있다.

전달인자(argument; 인수)

  • 함수를 '호출'할 때 쓰이는 실제 값 그 자체
  • 매개변수가 단순히 이름이라면, 전달인자는 해당 매개변수의 타입에 대한 리터럴(값 그 자체)이다.

아규먼트 레이블(argument label; 전달인자의 꼬리표)

  • Swift에서 사용되는, 함수가 호출될 때 전달인자 앞에 붙어 있는 레이블(꼬리표)
  • 레이블을 이용하면 어떠한 전달인자를 넣어야 할지를 짐작할 수 있게 한다
  • 아규먼트 레이블 없이 매개변수만 사용하면면, 매개변수의 이름이 곧 아규먼트 레이블이 된다.
  • 굳이 레이블을 이용하고 싶지 않다면 '밑줄(underscore) 기호'(_)를 이용하여 생략할 수 있다.

 

실습

1. 아규먼트 레이블 없이 매개변수만 있을 때

func someFunction(firstParameterName: Int, secondParameterName: Int) {
    // firstParameterName과 secondParameterName은
    // 각각 첫 번째와 두 번째의 매개변수에 대한 아규먼트 레이블이 된다.
}
someFunction(firstParameterName: 1, secondParameterName: 2)

2. 아규먼트 레이블을 따로 정의했을 때

func someFunction(argumentLabel parameterName: Int) {
    // 아규먼트 레이블은 argumentLabel이 되고,
    // parameterName은 함수의 정의에서 사용이 된다.
}

someFunction(argumentLabel: 1)

3. 아규먼트 레이블을 생략하고 싶을 때

func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
    // firstParameterName의 아규먼트 레이블은 생략이 되지만,
    // secondParameterName은 두 번째 매개변수에 대한 아규먼트 레이블로 반드시 사용되어야 한다.
}

someFunction(1, secondParameterName: 2)