Menu
Coddy logo textTech

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

Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨. 54개 중 14번째.

함수를 변수에 저장하고, 인수로 전달하며, 다른 함수에서 반환할 수 있다는 것을 배웠습니다. 이제 이러한 특성에서 비롯되는 가장 강력한 결과 중 하나인 클로저를 살펴보겠습니다.

클로저는 중첩 함수가 자신을 둘러싼 함수의 local 변수를, 바깥 함수의 실행이 끝난 후에도 "기억"할 때 발생합니다. 처음에는 이상하게 들릴 수 있습니다. 변수를 만든 function이 완료된 후에도 어떻게 해당 변수가 계속 존재할 수 있을까요?

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

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를 사용하는 multiplier function을 생성한 다음, 즉시 이를 사용하여 주어진 number를 곱하는 createMultiplier function을 작성하세요.

로직:

  • createMultiplier 내부에 number 매개변수를 받는 중첩 function을 생성하세요
  • 중첩 function은 외부 function의 factor를 자신의 매개변수에 곱해야 합니다
  • 중첩 function은 factor 값을 기억하는 클로저를 형성합니다
  • number 매개변수를 사용하여 multiplier function을 호출하고 결과를 반환하세요

매개변수:

  • factor (number): multiplier 값
  • number (number): 곱할 number

반환값:

  • numberfactor를 곱한 결과 (number)

직접 해보기

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

end
quiz icon실력 점검

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

로직 및 흐름 제어 (Logic & Flow)의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러