1. Nested function ( 중첩 함수 )
중첩 함수는 간단히 말하면 함수 정의 안에 또하나의 함수가 정의될 수 있는데, 이때 함수 안에 정의된 함수를 중첩 함수라고 한다. 이 함수는 일반적으로는 해당 함수가 정의된 함수의 내부에서만 사용될 수 있다.
def first():
print( "hey" )
def second():
return "hello"
print( second() )
2. First class function ( 일급함수 )
일급 함수라는 개념은 파이썬에 한정된 개념이 아닌, CS 전반에 걸쳐서 통용되는 개념이다.
이 함수는 다음을 충족하는 함수이다.
1. 함수 내에 변수를 선언할 수 있다.
2. 함수의 매개변수로 다른 함수를 전달할 수 있다.
3. 함수의 반환값(return) 으로 다른 함수를 전달할 수 있다.
그렇다면 파이썬이라는 언어에서 함수는 위 조건을 만족할까? 파이썬은 기본적으로 모든 것들이 객체로 취급되어, 함수도 객체로 취급된다. 그러므로 파라미터로 전달도 가능하며, 리턴값으로 함수를 전달할 수 있다.
이 중첩 함수와 일급 함수의 특성을 활용한다면 아래와 같은 코드도 작성이 가능하다.
def html_creator(tag):
def wrapper(msg):
return ('<{0}>{1}</{0}>'.format(tag, msg))
return wrapper
#사용
getBoldText = html_creator('b')
print( getBoldText("이것은 제목입니다") )
## 실행 결과
<b>이것은 제목입니다</b>
3. Closure function
Closure function 은 중첩 함수에서, 중첩 함수를 선언한 외부 함수가 사라진다 하더라도, 중첩 함수와 중첩 함수로부터 받은 변수값 등을 유지할수 있도록 저장/복사하는 기법을 말한다. 위 코드블럭에서 html_creator 라는 함수를 del html_creator 로 삭제한다 하더라도, getBoldText 라는 함수에 저장한 중첩 함수와 중첩 함수를 저장할때 전달받은 'b' 라는 값을 유지된다는 소리다.
애초에 위 코드에서 'b' 값은 html_creator 함수가 종료됨과 동시에 사라져야 마땅하지만, getBoldText 에 저장함으로써 저장된 함수를 실행했을 때 정상적으로 'b' 값이 나오는 것을 볼 수 있다.
제공해야할 기능이 적은 경우, class 를 선언해서 사용하기보다 Closure function 을 사용한다고 한다.
'개발자의 길' 카테고리의 다른 글
[Backend] HTTP 기초 지식 정리 (0) | 2022.05.01 |
---|---|
[Python3] Decorator(장식자) 란 무엇인가? (0) | 2022.03.06 |
[Java][SpringBoot] "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의노트 (0) | 2021.12.22 |
[Design pattern] 추상 팩토리 패턴 ( Abstract Factory pattern ) (1) | 2020.09.15 |
[Design pattern] 팩토리 메서드 패턴 ( Factory method pattern ) (0) | 2020.08.30 |