Menu
Coddy logo textTech

클로저(Closure)란 무엇인가요?

Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 14번째.

함수가 변수에 저장될 수 있고, 인자로 전달될 수 있으며, 다른 함수로부터 반환될 수 있다는 것을 배웠습니다. 이제 이것의 가장 강력한 결과 중 하나인 클로저(closures)에 대해 알아보겠습니다.

클로저는 중첩 함수가 외부 함수의 실행이 완료된 후에도 해당 외부 함수의 지역 변수를 "기억"할 때 발생합니다. 처음에는 이것이 이상하게 들릴 수 있습니다. 자신을 생성한 함수가 종료된 후에도 어떻게 변수가 여전히 존재할 수 있을까요?

이 개념을 보여주는 간단한 예제입니다:

function createCounter()
    local count = 0
    
    return function()
        count = count + 1
        return count
    end
end

local counter = createCounter()
print(counter())  -- 출력: 1
print(counter())  -- 출력: 2
print(counter())  -- 출력: 3

createCounter()가 호출되면, 지역 변수 count를 생성하고 익명 함수를 반환합니다. 보통은 createCounter()가 종료되면 count가 사라질 것이라고 예상할 것입니다. 하지만 반환된 함수는 여전히 count에 접근할 수 있습니다. 즉, 해당 변수를 "클로저로 감쌉니다(closes over)".

counter()를 호출할 때마다, createCounter()가 처음 실행될 때 생성되었던 동일한 count 변수에 접근하고 이를 수정합니다. 내부 함수는 자신의 환경을 함께 유지하며, 호출 간의 상태를 보존합니다.

challenge icon

챌린지

쉬움

특정 인자(factor)를 사용하는 곱셈 함수를 생성한 후, 즉시 해당 함수를 사용하여 주어진 숫자를 곱하는 createMultiplier 함수를 작성하세요.

로직:

  • createMultiplier 내부에 숫자 파라미터를 받는 중첩 함수를 생성합니다.
  • 중첩 함수는 자신의 파라미터에 외부 함수의 factor를 곱해야 합니다.
  • 중첩 함수는 클로저를 형성하여 factor 값을 기억합니다.
  • number 파라미터를 사용하여 곱셈 함수를 호출하고 그 결과를 반환합니다.

파라미터:

  • factor (number): 곱할 인자 값
  • number (number): 곱해질 숫자

반환 값:

  • numberfactor를 곱한 결과 (number)

치트 시트

클로저(closure)는 중첩된 함수가 외부 함수의 실행이 끝난 후에도 해당 외부 함수의 지역 변수를 "기억"할 때 발생합니다.

내부 함수는 자신의 환경을 함께 가지고 다니며, 호출 간의 상태를 유지합니다:

function createCounter()
    local count = 0
    
    return function()
        count = count + 1
        return count
    end
end

local counter = createCounter()
print(counter())  -- 출력: 1
print(counter())  -- 출력: 2
print(counter())  -- 출력: 3

createCounter()가 호출되면, 지역 변수 count를 생성하고 익명 함수를 반환합니다. 반환된 함수는 여전히 count에 접근할 수 있습니다. 즉, 외부 함수의 실행이 끝난 후에도 해당 변수를 "감싸게(closes over)" 됩니다.

직접 해보기

function createMultiplier(factor, number)
    local multiply = function(x)
        return x * factor
    end
    
    -- 아래에서 multiply 함수를 사용하세요

end
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨