티스토리 뷰

반응형

 

 

안녕하세요? 개발자 멍구입니다. 🤗
오늘은 스위프트문법 관련 개발자문서 내용에서 볼 수 있는, "메서드 안의 메서드" 중첩함수(Nested Functions)에 대해서 알아보도록 합니다. 바로 시작하겠습니다. 

 


Nested Functions
"메서드안의 메서드" 중첩 함수(메서드)

메서드는 전역적으로 사용되는 전역메서드가 존재하고, 클래스나 구조체 내에서 지역적으로 선언되는 메서드도 존재합니다. 심지어, 메서드 내에 또 다른 메서드가 정의될 수도 있습니다.

이렇게 메서드 안에 메서드가 중첩으로 정의되었을때 메서드 내부의 메서드를 가리켜 중첩 메서드, 중첩 함수(Nested Functions)라고 합니다. 

기본적으로 중첩 메서드는 해당 메서드 밖으로는 감추어져 있습니다. 하지만, 정의된 메서드 내부에서는 참조되어 호출 및 사용될 수 있죠. 안에 감추어진 중첩 메서드 또한 반환값을 가질 수 있으며, 해당 반환값을 중첩 메서드 중 바깥쪽 메서드에서 받아서 바깥으로 반환할 수 있습니다.

이러한 "메서드 안의 메서드", 중첩 메서드의 사용 예시는 아래 코드를 통해 볼 수 있습니다. 

 

 

스위프트 중첩메서드(Nested Method) 사용 예시

위의 코드는 chooseStepFunction 내의 중첩 메서드, stepForward, stepBackward를 사용하는 사용 예시입니다. chooseStepFunction의 Boolean 값에 따라 참조되는 중첩메서드는 stepForward, stepBackward 둘 중 하나가 참조되어 반환됩니다. 그 반환 타입은 중첩메서드의 클로져(함수) 타입인 (Int) -> Int 가 되지요. 중첩 메서드는 Int 값 한개를 매개변수로 받아 Int 타입을 반환합니다. 

- chooseStepFunction의 정의를 보면, 받은 인자값이 true라면 stepBackward 클로져 함수를, false라면 stepForward 클로져 함수를 반환합니다. 

- 중첩메서드가 포함된 메서드, chooseStepFunction 정의 이후 currentValue 가 정의되었습니다. 그 값은 -4 입니다. 
  -> 이어서 중첩메서드를 포함한 메서드, chooseStepFunction이 호출되었습니다.

- 메서드에서 전달받은 인자값은  currentValue >, -4 > 0 == false 이므로 stepForward 메서드가 반환됩니다. 즉, chooseStepFunction 메서드의 반환값을 받은 상수, moveNearerToZero는 stepForward (클로져 함수)메서드를 참조하게 되었습니다. 

// currentValue > 0 은 false이므로 stepForward() 메서드를 반환하게 됩니다.
// -> moveNearerToZero는 stepForward 메서드를 참조합니다. 
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)


이후에 while문을 통해 currentValue가 0이 아닐때까지 특정 연산을 수행합니다.

currentValue가 0이 되기 전까지 반복해서 moveNearerToZero 클로져에 currentValue 값을 인자로 받아 그 반환값을 currentValue가 받게 되는데, moveNearerToZero는 앞서 보았듯이 중첩 함수, stepForward 클로져를 참조하고 있으므로, 인자값 + 1을 반환하게 됩니다.

즉, 0이 되기 전까지 초기 currentValue 값에서 1씩 증가하는 연산(-3, -2, -1, 0)을 수행하게 됩니다. 그 출력 예시는 아래와 같습니다.

 

 


만약 currentValue가 양수였다면 어떻게 되었을까요?? 🤔
-> 앞서 있었던 연산 결과, stepBackward 메서드를 반복 호출하면서 그 반대로 양수값에서 0이 될때까지 1씩 감소하는 것을 볼 수 있겠습니다. 그 결과는 아래와 같습니다. 

 

 

앞서 얘기 했던 것과 같이 중첩메서드, stepBackward의 반복 호출 결과로 currentValue 값의 대한 결과로 3 -> 2 -> 1 -> zero 문구가 출력되는 것을 볼 수 있습니다. 

 

 


오늘은 스위프트에서 함수 내에 선언되는 함수 속의 함수, 중첩함수(nested function)에 대해서 알아보았습니다. 👨🏻‍💻
즐거운 하루 되시고, 다음에 또 뵙겠습니다. ^-^// 👍🏼

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함