Menu
Coddy logo textTech

범위와 블록

Coddy Lua 여정의 Fundamentals 섹션에 포함된 레슨 — 90개 중 86번째.

Lua에서는 do...end 블록을 사용하여 코드 어디에서나 새로운 스코프를 생성할 수 있습니다. 이러한 블록을 통해 로컬 변수에 접근할 수 있는 위치를 정확하게 제어할 수 있으며, 변수 스코프에 대한 정밀한 제어를 가능하게 합니다.

do...end 블록을 사용하여 새로운 스코프를 생성하는 방법은 다음과 같습니다:

local outerVar = "I'm outside"

do
    local innerVar = "I'm inside"
    print(outerVar)  -- 이 코드는 작동합니다
    print(innerVar)  -- 이 코드도 작동합니다
end

print(outerVar)  -- 이 코드는 작동합니다
print(innerVar)  -- 이 코드는 오류를 발생시킵니다!

스코프의 강력한 점은 서로 다른 블록에서 동일한 이름을 가진 지역 변수를 가질 수 있으며, 이들이 완전히 분리된 상태로 유지된다는 것입니다:

local name = "Alice"

do
    local name = "Bob"  -- 서로 다른 변수입니다!
    print(name)  -- "Bob"을 출력합니다
end

print(name)  -- "Alice"를 출력합니다

do...end 블록은 지역 변수를 위한 독립된 환경을 생성합니다. 블록 내부에서 선언된 변수는 외부 스코프로 벗어날 수 없지만, 외부 스코프의 변수는 내부 블록에서 접근할 수 있습니다.

challenge icon

챌린지

쉬움

중첩된 do...end 블록을 생성하여 동일한 이름을 가진 지역 변수가 서로 다른 스코프에서 어떻게 완전히 분리되어 유지되는지 확인해 보세요.

먼저, 외부 스코프에 값이 10playerLevel이라는 이름의 지역 변수를 생성하고 이를 출력합니다.

그 다음 do...end 블록을 생성하고 그 내부에 다음을 수행합니다:

  • 값이 25playerLevel이라는 이름의 새로운 지역 변수를 선언합니다.
  • 이 내부의 playerLevel을 출력합니다.

내부 블록이 종료된 후, 외부의 playerLevel을 다시 출력하여 값이 변경되지 않고 유지되었음을 보여줍니다.

이는 서로 다른 스코프에서 이름이 동일한 지역 변수들이 완전히 독립적이라는 것을 보여줍니다. 즉, 내부 변수는 외부 변수에 영향을 주지 않습니다.

치트 시트

코드 어디에서나 do...end 블록을 사용하여 변수 범위를 제어하는 새로운 스코프를 만들 수 있습니다:

local outerVar = "I'm outside"

do
    local innerVar = "I'm inside"
    print(outerVar)  -- 잘 작동합니다
    print(innerVar)  -- 이것도 잘 작동합니다
end

print(outerVar)  -- 잘 작동합니다
print(innerVar)  -- 에러가 발생합니다!

서로 다른 블록에서 이름이 같은 지역 변수는 완전히 별개로 유지됩니다:

local name = "Alice"

do
    local name = "Bob"  -- 다른 변수입니다!
    print(name)  -- "Bob"을 출력합니다
end

print(name)  -- "Alice"를 출력합니다

블록 내부에서 선언된 변수는 외부 스코프로 빠져나갈 수 없지만, 외부 스코프의 변수는 내부 블록에서 접근할 수 있습니다.

직접 해보기

-- TODO: 여기에 코드를 작성하세요
quiz icon실력 점검

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

Fundamentals의 모든 레슨