[iOS] 매개변수(Parameter)

 

 프로그래밍에선 매개변수에도 종류가 있으며, Swift언어에서는 와일드카드 식별자를 사용해 생략도 할 수 있고, 또 전달인자라는 개념도 있다. 이 글에선 이 것들에 대해서 정리해보려고 한다.

 

 

 

1. 매개변수(Parameter)

 

 흔히 매개변수(Parameter)라고 하면 메서드를 사용할 때 외부로부터 전달받는 값을 의미한다.

sayHello(name: "Greed")

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

 

위의 코드로 설명하자면 sayHello라는 메서드를 호출할 때, name이 바로 매개변수이다.

 

 

2. 전달인자(Argument)

 

 전달인자(Argument)는 함수를 실제로 호출할 때 전달하는 값으로 시시각각 바뀐다는 특징이 있다.

sayHello(name: "Greed")

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

 

위와 같은 코드로 설명하자면 name이 매개변수이고, 그 옆에 실제로 name에 해당하는 값인 Greed가 바로 전달인자이다.

 

 

3. 외부 매개변수(Argument Label)와 내부 매개변수(Paremeter Name)

 

 스위프트에서는 함수를 정의할 때 매개변수의 용도에 따라서 두 가지로 분리할 수 있다. 

 

외부 매개변수 : 함수 외부에서 함수나 인자값을 구한하기 위해 사용하는 변수

내부 매개변수 : 입력된 인자값을 함수 내부에서 참조하기 위해 사용하는 변수

 

func 함수이름(<외부 매개변수명> <내부 매개변수명>: <타입>) {
	//함수 내용
    }

 

사용하는 방법은 위와 같다.

 

func myFunc(one n1: Int, two n2: Int, three n3: Int) -> () {
    print(n1) // 함수 내부 : 내부 매개변수로
    print(n2)
    print(n3)
    return
}
 
myFunc(one: 1, two: 2,three: 3) // 함수 외부 : 외부 매개변수로

 

실제로 사용한다면 위와 같은 형태로 사용할 수 있다. 그리고 함수 내부에서는 외부 매개변수(Argument Label)을 사용할 수 없으며, 마찬가지로 함수를 호출할 때는 내부 매개변수(Paremeter Name)를 사용할 수 없다.

 

 

4. 와일드 카드 식별자(_)

외부 매개변수(Argument Label)를 사용하지 않고 싶다면, 와일드 카드 식별자(_)를 사용하면 된다. 그러면 함수를 호출할 때 매개변수를 쓰지 않아도 된다.

 

func myFunc(_ n1: Int, _ n2: Int, _ n3: Int) -> () {
    print(n1) // 함수 내부 : 내부 매개변수로
    print(n2)
    print(n3)
    return
}
 
myFunc(1, 2, 3) // 외부 매개변수를 와일드카드 식별자로 변환해, 생략 가능

 

위와 같이 외부 매개변수를 _로 바꿔서 함수를 호출할 때, 매개변수 생략이 가능하다. 하지만 모든 매개변수를 다 생략하는 것은 권장하지 않는다. 그 이유는 함수를 호출할 때, 어떤 전달인자가 들어가야하는지 알기가 힘들며, 가독성이 떨어지기 때문이다. 코딩이란 작업이 혼자서도 할 수 있지만 협업을 한다면 다른 개발자가 해당 코드를 봤을때 이해하기 어려울 수 있다.