Lua - 가비지 수집
안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 Lua의 가비지 수집 세계로 깊게潜入할 것입니다. 가비지 수집에 대해 들어본 적이 없으시다면 걱정 마세요 - 이 튜토리얼이 끝나면 전문가가 될 것입니다! 이 흥미로운 여정을 함께 시작해봅시다.
가비지 수집이란?
시작하기 전에 가비지 수집이 무엇인지 이해해 보겠습니다. 생일 파티를 상상해 보세요. 파티가 진행되면서到处에 풍선이 있습니다. 파티가 계속되면서 일부 풍선이 터지거나 기체가 빠집니다. 이 풍선은 더 이상 유용하지 않지만 여전히 공간을 차지하고 있습니다. 프로그래밍에서 우리는 이러한 무용한 풍선을 "가비지"라고 부릅니다 - 프로그램이 더 이상 필요로 하지 않는 메모리内的 객체입니다.
가비지 수집은 파티에서 이러한 무용한 풍선을 수거하고 처리해주는 도움말이 있는 친구 같은 것입니다. 새로운 풍선(또는 우리의 경우 메모리 내 새로운 객체)를 위한 공간을 확보합니다.
Lua가 가비지 수집을 어떻게 처리하나요?
Lua는 자동 가비지 수집기를 사용합니다. 이는 메모리 정리를 수동으로 해야 할 필요가 없음을 의미합니다 - Lua가 대신 해줍니다! 그렇지 않나요? 코드에 대한 개인 청소 서비스를 갖는 것 같습니다.
간단한 예제를 보겠습니다:
function createBalloon()
local balloon = {}
balloon.color = "red"
balloon.size = "large"
return balloon
end
local myBalloon = createBalloon()
print(myBalloon.color) -- 출력: red
myBalloon = nil
-- 이제 풍선 객체는 가비지 수집 대상이 됩니다.
이 예제에서 우리는 풍선 객체를 생성하고 myBalloon
에 할당합니다. myBalloon
을 nil
로 설정하면 "이 풍선이 더 이상 필요하지 않다"고 말하고 있는 것입니다. Lua의 가비지 수집기는 결국 이 풍선 객체가 사용한 메모리를 정리할 것입니다.
가비지 수집기 중지
이제 가비지 수집기 중지에 대해 이야기해 보겠습니다. 파티에서 도움말이 있는 친구가 한 번에 모두 청소하기로 결정할 때, 잠시 파티가 방해받을 수 있습니다, 아닙니까? 마찬가지로 Lua의 가비지 수집기가 실행될 때, 프로그램의 실행에 잠시 중지가 발생할 수 있습니다.
Lua는 collectgarbage("pause")
함수를 사용하여 이 중지를 제어할 수 있습니다. 다음과 같이 작동합니다:
collectgarbage("pause") -- 가비지 수집을 중지합니다
-- 중요한 코드 여기에
collectgarbage("restart") -- 가비지 수집을 재개합니다
이는 시간 민감한 작업을 수행할 때 중요합니다.
가비지 수집기 스텝 배수
스텝 배수는 청소하는 친구에게 "이번에는 좀 더 많이(또는 적게) 청소해 줘"라고 말하는 것과 같습니다. collectgarbage("setstepmul", multiplier)
함수를 사용하여 이를 조정할 수 있습니다.
-- 가비지 수집기가 각 주기마다 더 열심히 작업하도록 설정합니다
collectgarbage("setstepmul", 200)
-- 많은 가비지를 생성합니다
for i = 1, 1000000 do
local temp = {}
end
-- 가비지 수집 주기를 강제로 실행합니다
collectgarbage("collect")
이 예제에서 우리는 가비지 수집기가 각 수집 주기마다 일반적인 노력의 200%를 하도록 설정하고 있습니다.
가비지 수집기 함수
Lua는 가비지 수집기와 상호작용할 수 있는 여러 함수를 제공합니다. 이를 편리한 표로 정리해 보겠습니다:
함수 | 설명 |
---|---|
collectgarbage("collect") |
전체 가비지 수집 주기를 수행합니다 |
collectgarbage("count") |
Lua가 사용하고 있는 메모리 총량(KB)을 반환합니다 |
collectgarbage("step", size) |
가비지 수집을 단계별로 수행합니다 |
collectgarbage("isrunning") |
수집기가 실행 중인지 확인합니다 |
collectgarbage("stop") |
가비지 수집기를 중지합니다 |
collectgarbage("restart") |
가비지 수집기를 재개합니다 |
collectgarbage("setpause", pause) |
수집 주기 간의 중지를 설정합니다 |
collectgarbage("setstepmul", multiplier) |
스텝 배수를 설정합니다 |
이 중 몇 가지를 실제로 사용해 보겠습니다:
print("사용 중인 메모리: " .. collectgarbage("count") .. " KB")
-- 가비지를 생성합니다
for i = 1, 100000 do
local temp = {}
end
print("가비지 생성 후 메모리: " .. collectgarbage("count") .. " KB")
collectgarbage("collect")
print("수집 후 메모리: " .. collectgarbage("count") .. " KB")
if collectgarbage("isrunning") then
print("가비지 수집기가 실행 중입니다")
else
print("가비지 수집기가 실행 중이 아닙니다")
end
이 스크립트는 메모리 사용량을 확인하고, 가비지를 생성하고, 강제로 수집을 하고, 수집기가 실행 중인지 확인하는 방법을 보여줍니다.
결론
축하합니다! Lua의 가비지 수집 세계로 첫 걸음을 뗐습니다. 기억하시길, 이러한 저수준의 세부 사항을 배우는 것은 흥미로운 일이지만, Lua의 아름다움 중 하나는 일상적인 프로그래밍에서 가비지 수집을 걱정할 필요가 없다는 것입니다. 코드에 마법의 청소 요정이 있는 것과 같습니다!
그러나 이 개념을 이해하면 특히 대량의 데이터를 다루거나 성능이 중요한 애플리케이션에서 더 효율적인 프로그램을 작성하는 데 도움이 될 수 있습니다.
계속 연습하고, 탐구하고, Lua를 즐기세요! 쓰레기를 치우는 것이 이렇게 흥미로울 줄이谁知道呢, 정말로!
Credits: Image by storyset