Re: 33.5 클로저 연습문제 질문입니다
, 도장_ 관리자님이 작성c = counter()
이 부분은 클로저의 기본 문법입니다.
UNIT 33.3에서 클로저 기본 문법을 다시 복습하세요.
c에 저장된 함수가 클로저입니다. UNIT 33.3 본문 설명에도 다음과 같이 쓰여 있습니다.
c에 저장된 함수가 클로저입니다.
클로저를 저장했으면 이제 함수로 호출하면 됩니다.
c()로 호출하는 것이죠.
인수가 없는 건 클로저를 이용하기 때문입니다.
클로저의 개념을 이해하지 못한 것으로 보입니다. UNIT 33 전체를 이해해야 합니다.
UNIT 33.1을 보시면 함수에서의 지역 변수를 설명합니다. 지역 변수는 함수 호출이 끝나면 변수가 사라집니다. 함수의 범위를 벗어나면 함수 범위에 있는 변수는 사라집니다. 클로저는 함수 호출이 종료되어도 함수 안의 변수가 사라지지 않습니다.
그림 33-1의 일반적인 함수와
그림 33-2의 지역 범위와
그림 33-3의 함수의 지역 변수에 접근할 수 있는 범위와
그림 33-4의 클로저의 개념을
구분해서 이해할 수 있어야 합니다.
nonlocal i로 선언했으니까 함수 범위가 아닌 바깥에 있는 범위에서 변수 i를 찾아서 사용하라가 됩니다. 함수 호출이 사라져도 변수 i가 사라지지 않고, i의 값도 유지가 됩니다. 값이 유지되는 것을 보여주기 위해 1을 더한 결과를 출력하는 것입니다.
어려운 고급 개념이고, 실무 사용빈도가 높지는 않으니 이해가 어려우면 패스하세요.
UNIT 33을 10번 반복해보기, nonlocal, 클로저 예제를 책 보지 않고, 10번, 20번 반복해서 코딩하면서 기본 구조를 암기하기. 기본 구조를 암기하면 이해는 쓰다 보면 자연히 따라 옵니다. 기본 구조 암기했으면 예제를 이것저것 바꾸면서 실험해보기. nonlocal i에서 nonlocal을 지우고, i = 10으로 바꾸면 어떻게 되는가... 등등...
개발자들이 for, while을 책도 안 보고 코딩하는 건 1만 번 이상 작성해봤기 때문입니다.
알고리즘 코딩 테스트 준비하는 분들은 5분 컷으로 퀵정렬, 삽입정렬 코드를 작성하는 연습을 하고요. 철저한 암기죠. 클로저의 기본 문법 구조를 암기하는 게 가장 빠른 방법입니다.