글 작성자: HEROHJK

Swift를 하면서 정말 유용한 문법이 두가지가 있었습니다.


첫번째는 호출시 매개변수의 이름을 제어하는 문법입니다.


Swift의 기본적인 함수 구조를 보자면 이렇습니다.

//선언 및 정의
func myFunc(paramOut paramIn: String) -> Void{//Void는 생략 가능
    print(paramIn)
}

//호출
myFunc(paramOut: "안녕하세요") 

이런식으로 사용이 가능합니다.


변수명을 보시면, 앞쪽 paramOut은, 호출시 사용되는 명칭이며, 뒤쪽 paramIn은 내부에서 사용되는 명칭입니다.


이렇게 외부에서 인수 이름을 입력하면, 같은 타입의 매개변수가 여러가지가 필요할때 상당히 편리해 집니다.


예를들어, 학생의 성적을 입력받아, 평균치를 출력하는 함수를 사용할때를 보겠습니다. (제가 이런 예제를 정말 싫어하는데.. 마땅히 바로 생각나는게 없네요 ㅠㅠ)


//선언 및 정의 //외부 인수값이 "_" 일 경우, 생략이 가능하다. 이를 와일드카드라고 한다. func calculateGrade(_ scoreOne: Int, _ scoreTwo: Int, _ scoreThree: Int) -> Double{ var avgScore: Double = (scoreOne + scoreTwo + scoreThree) / 3.0 return avgScore } print(calculateGrade(70, 60, 80))


이런식으로 함수를 호출 해 버리면, 조금만 더 매개변수가 많아지거나, 코드들이 많고 복잡해질때, 순서를 놓치기가 쉽습니다.


그래서 개인적으로 인수 이름을 쓰면, 코드는 길어지더라도, 가독성은 훨씬 좋아진다고 생각합니다.

//선언 및 정의
func calculateGrade(scoreOne scoreOne: Int, scoreTwo scoreTwo: Int, scoreThree scoreThree: Int) -> Double{
    var avgScore: Double = (scoreOne + scoreTwo + scoreThree) / 3.0
    return avgScore
}

//선언 및 정의에서 외부 인수 이름이 포함되어 있으므로, 생략할수 없고, 반드시 작성해야 한다
print(calculateGrade(scoreOne : 70, scoreTwo : 60, scoreThree : 80)) 


이런식으로 훨씬더 가독성 좋은 코드가 됩니다.


C나 C++에서는 이런 기능이 없는걸로 압니다.


그래서 고수분께 여쭈어 봤더니, 쓰려면 이렇게 쓸수도 있다고 하셨습니다.


printf("%f", CalculateGrade(
70, //scoreOne
60, //scoreTwo
80 //scoreThree
));


C#에서도 이런 기능이 있나 하고 찾아보았습니다.


역시 C#은 지원을 해 주더군요.


4.0부터 지원합니다.


따로 쓰는법도없이 정말 간단합니다.

//선언 및 정의
Console.WriteLine(CalculateGrade(scoreOne: 70, scoreTwo: 60, scoreThree: 80));


C#에서는 내부인수, 외부인수의 구분이 없으므로 써도 그만, 안써도 그만입니다.


하지만 개인적으로 이것은 긴 코드를 분석하는데 가독성향상에 도움이 되리라 판단하고, 


앞으로는 인수명을 포함하는 습관을 가져보려 합니다.

반응형