Lua 조건문에서 true와 false가 결정되는 방식

개발/lua script1 2025. 12. 29. 08:10

Lua를 처음 접하는 분들도 이해할 수 있게, 조건식이 true로 평가되는 기준을 중심으로 설명합니다. 

 

 

Lua에서 조건식이 true로 평가되는 기준

Lua를 사용하다 보면 조건문이 생각과 다르게 동작한다고 느끼는 경우가 종종 있습니다. 특히 다른 언어를 사용해 본 경험이 있다면,

"이 값도 false 아닌가?"라는 의문이 들 때가 많습니다.

그 이유는 Lua가 조건식을 평가하는 기준이 상당히 단순하면서도 명확하기 때문입니다.

 

이 글에서는 Lua에서 조건식이 언제 true로 평가되는지, 그리고 왜 그렇게 설계되었는지를 중심으로 정리해 보겠습니다.

 


 

Lua 조건식의 핵심 원칙

Lua에서 조건식을 평가할 때 기억해야 할 핵심은 딱 하나입니다.

 

Lua에서 false로 평가되는 값은 오직 false와 nil뿐입니다.

그 외의 모든 값은 true로 평가됩니다.

 

이 원칙만 정확히 이해하면 Lua의 if 문, while 문, 논리 연산자 동작이 훨씬 명확해집니다.

 


false로 평가되는 값

Lua에서 조건식이 false로 판단되는 경우는 아래 두 가지뿐입니다.

 

  • false
  • nil

 

예제를 보면 바로 이해됩니다.

if false then
    print("실행되지 않음")
end

if nil then
    print("실행되지 않음")
end

 

위 코드는 어떤 경우에도 print가 실행되지 않습니다. Lua 입장에서는 false와 nil만이 명확한 거짓이기 때문입니다.

 


 

true로 평가되는 값

Lua에서는 많은 값들이 직관과 다르게 true로 평가됩니다. 대표적인 예시는 다음과 같습니다.

if 0 then
    print("0은 true")
end

if "" then
    print("빈 문자열도 true")
end

if {} then
    print("빈 테이블도 true")
end

 

  • 숫자 0은 true
  • 빈 문자열 ““도 true
  • 빈 테이블 {}도 true

 

C, Java, JavaScript 같은 언어에 익숙한 분들은 특히 0이나 빈 문자열이 false로 처리될 것이라 예상하기 쉬운데, Lua에서는 그렇지 않습니다.


 

조건식에서 자주 헷갈리는 사례

 

숫자 비교

아래 조건을 보면 언뜻 false일 것 같지만, 실제로는 true입니다.

local n = 0

if n then
    print("조건 만족")
end

n이 0이더라도 nil이나 false가 아니기 때문에 조건은 true로 평가됩니다. 숫자의 크기나 값은 조건식 평가와 직접적인 관련이 없습니다.

 


 

문자열 체크

문자열이 비어 있는지 확인하고 싶다면, 단순히 if str 같은 방식은 적절하지 않습니다.

local str = ""

if str then
    print("항상 실행됨")
end

 

빈 문자열도 true이기 때문에 위 조건은 항상 실행됩니다. 문자열 길이를 확인하려면 아래와 같이 명시적으로 비교해야 합니다.

if str ~= "" then
    print("빈 문자열이 아님")
end

 


 

nil 체크가 중요한 이유

Lua에서 변수에 값이 없다는 의미는 보통 nil입니다. 그래서 조건문에서는 nil 여부를 명확히 확인하는 습관이 중요합니다.

if value ~= nil then
    print("값이 존재함")
end

Lua 코드 전반에서 nil 체크는 버그를 줄이는 데 매우 중요한 역할을 합니다.


 

논리 연산자 and, or의 평가 방식

Lua의 and, or 연산자는 단순히 true나 false를 반환하지 않습니다. 실제로는 평가된 값 자체를 반환합니다.

print(true and "A")   -- A
print(false and "A")  -- false
print(nil or "B")     -- B
print(0 or "C")       -- 0

 

  • and는 앞의 값이 false 또는 nil이면 그 값을 반환
  • or는 앞의 값이 true로 평가되면 그 값을 반환

 

이 특성은 기본값 처리나 조건부 값 선택에 자주 활용됩니다.

 


 

Lua가 이런 기준을 사용하는 이유

Lua는 임베디드 스크립트 언어로 설계되었고, 문법과 평가 규칙을 최대한 단순하게 유지하는 것이 중요한 목표였습니다.

그래서 "거짓은 오직 false와 nil"이라는 규칙을 통해 조건 평가를 명확하게 정의했습니다.

 

이 덕분에 조건식의 모호함은 줄어들지만, 다른 언어 경험이 있는 개발자에게는 처음에 혼란을 줄 수 있습니다.

 


 

반응형
admin