본문으로 바로가기

Python: Function (3)

category Programming/Python 2021. 1. 17. 14:54
반응형

Inner Function

파이썬의 펑션에 관한 세번째 글이다. 이번에는 Inner Function에 대해 알아보자.

이너 펑션과 관련하여 여러 글들을 찾아보면, '내부함수'나 '내장함수', 혹은 '중첩함수', '지역함수'등... 다양한 이름으로 이너 펑션을 부르는 것을 알 수 있다. 모두 이너 펑션이 가지고 있는 특성에서 크게 벗어나지 않기 때문에 원하는 이름으로 편하게 불러도 되겠지만, 대부분의 프로그래밍 코드를 영어로 작성한다는 점에서 영어 그대로의 이름을 부르는 것이 여러모로 유리하다는 생각을 가지고 있다. 그런 관점에서 이너 펑션도 이름 그대로 Inner Function 또는 Nested Function 이라고 불러주는 것이 여러 기술 문서를 접할 때 다른 용어 사용으로 인해 발생할 수 있는 이해의 장벽을 사전에 차단할 수 있다고 생각한다.

각설하고 본론으로 돌아와서, 이너 펑션은 이름 그대로 펑션 내부에 정의되는 펑션을 의미한다.

위 그림은 이너 펑션의 예로, fcAddValue라는 이름으로 정의된 펑션 내부에 fcAdd라는 이름의 또 다른 펑션이 정의되는 것을 확인할 수 있다. 이렇게 특정 펑션 내부에 또 다른 펑션이 정의된다고 해서, 이너 펑션 또는 네스티드 펑션이라고 부른다.

펑션 내부에 정의된 이너 펑션은 당연히 펑션 외부에서 호출할 수 없다. 만약, 외부에서 이너 펑션을 호출하는 경우, 위 그림과 같이 파이썬 인터프리터는 에러를 출력한다. 바꿔 말하면, 이너 펑션은 펑션이 정의된 위치에서만 호출할 수 있다는 의미이고, 그런 점에서 지역 변수 같이 접근할 수 있는 범위를 한정시킬 수 있는 특성을 가지고 있다.

Closure

지금까지 살펴본 이너 펑션을 사용하기 위해서는 펑션 내부에서 호출해주어야만 한다. 하지만, 이너 펑션을 클로저로 활용한다면, 외부에서도 펑션을 호출할 수 있다.

위 그림을 자세히 살펴보자. fcOperating이라는 펑션 내부에 fcAdd와 fcSub이라는 2개의 이너 펑션이 2번부터 5번 라인 사이에 정의되어 있다. 그리고, 외부에 노출되는 fcOperating 펑션의 매개변수로 어떤 데이터가 전달되는지에 따라 8번과 10번 라인에서 각기 다른 펑션을 호출이 아닌 반환하고 있다. 그리고, 12번과 15번 라인에서 반환된 이너 펑션을 fc라는 개체에 전달하고 있다.
호출 대신 반환이라는 단어를 사용하고, 반환된 이너 펑션을 개체에 전달한다고 표현한 이유를 13번과 16번 라인을 통해 간접적으로 알 수 있다. 바로, 13번과 16번의 print 함수 안에서 이너 펑션이 전달된 개체인 fc를 이용해 이너 펑션을 호출하고 있기 때문이다.
이렇게 외부에서 이너 펑션을 접근하도록 만들어주는 것이 클로저이다.

 

 

반응형

'Programming > Python' 카테고리의 다른 글

Python: Function (5)  (0) 2021.01.20
Python: Function (4)  (0) 2021.01.19
Python: Function (2)  (0) 2021.01.15
Python: Function (1)  (0) 2021.01.12
Python: Comprehension  (0) 2021.01.05