여러 반환 값
하나의 함수 호출에서 여러 값을 반환하고 받습니다.
여러 반환 값은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
여러 값 반환
대부분의 언어와 달리 Lua 함수는 하나의 return 문에서 여러 값을 기본적으로 반환할 수 있습니다. 여러 값은 return 뒤에 쉼표로 구분해 작성합니다. 따라서 래퍼 객체나 출력 매개변수가 필요하지 않습니다.
local function divmod(a, b)
return math.floor(a / b), a % b
end
local quotient, remainder = divmod(17, 5)
print(quotient, remainder) -- 3 2반환 값 조정
Lua는 반환 값의 개수를 받는 쪽의 개수에 맞게 조정합니다. 남는 값은 버리고, 부족한 값은 nil이 됩니다. 이 조정은 함수 호출이 값 목록의 마지막 표현식이 아닐 때마다 발생합니다. 마지막 위치에서는 첫 번째 값만 유지됩니다.
local function triple()
return 10, 20, 30
end
local a, b, c = triple()
print(a, b, c) -- 10 20 30
local x, y = triple()
print(x, y) -- 10 20 (30 discarded)
local p = triple()
print(p) -- 10 (only first when 1 var)중간 위치 조정
함수 호출이 표현식 목록의 중간에 있을 때(마지막 위치가 아닐 때) Lua는 그 결과를 하나의 값으로 줄입니다. 목록의 마지막 표현식만 여러 값을 생성할 수 있습니다.
local function pair()
return 1, 2
end
-- pair() in middle: only 1 value used
local t = {pair(), pair()}
print(#t, t[1], t[2], t[3]) -- 3 1 1 2
-- first pair() gives just 1; last pair() gives 1,2
-- pair() at end: all values used
local t2 = {10, pair()}
print(#t2, t2[1], t2[2], t2[3]) -- 3 10 1 2괄호로 단일 값 강제하기
함수 호출을 괄호로 감싸면 정확히 하나의 값을 반환하도록 강제됩니다. 함수가 몇 개의 값을 생성하든 첫 번째 반환 값만 원할 때 유용합니다.
local function coords()
return 10, 20, 30
end
print(coords()) -- 10 20 30 (all three)
print((coords())) -- 10 (parentheses: single value only)
local x = (coords())
print(x) -- 10string.find의 반환 값
많은 표준 라이브러리 함수는 여러 값을 반환합니다. string.find는 일치하는 부분의 시작 위치와 끝 위치(그리고 캡처)를 반환합니다. math.modf는 정수 부분과 소수 부분을 반환합니다. 이러한 패턴을 이해하면 표준 라이브러리를 능숙하게 사용할 수 있습니다.
local s = "hello world"
local start, finish = string.find(s, "world")
print(start, finish) -- 7 11
-- math.modf: integer and fractional parts
local int, frac = math.modf(3.75)
print(int, frac) -- 3 0.75table.pack으로 값 캡처하기
table.pack(...)은 모든 인수(또는 ...를 통한 반환 값)를 테이블에 담습니다. 이 테이블에는 nil 값을 포함한 전체 개수가 저장된 n 필드가 있습니다. #는 첫 번째 빈 위치에서 멈추므로, table.pack은 #와 달리 정확한 개수를 보존합니다.
local function getData()
return "Alice", 30, nil, true
end
local t = table.pack(getData())
print(t.n) -- 4
print(t[1]) -- Alice
print(t[2]) -- 30
print(t[3]) -- nil
print(t[4]) -- truetable.unpack으로 값 펼치기
table.unpack(t, i, j)는 테이블의 요소를 개별 값으로 반환합니다. 이는 table.pack의 반대 기능입니다. 테이블의 내용을 함수 인수로 전달하거나 반환 문에서 값들을 펼칠 때 사용합니다.
local args = {10, 20, 30}
local function sum3(a, b, c)
return a + b + c
end
print(sum3(table.unpack(args))) -- 60
-- Use in return
local function passThrough(t)
return table.unpack(t)
end
print(passThrough({5, 6, 7})) -- 5 6 7오류 방식 반환
Lua에서 흔히 사용하는 규칙은 실패할 때 nil, errorMessage를 반환하고, 성공할 때 결과를 반환하는 것입니다. 호출하는 쪽에서는 첫 번째 반환 값을 확인합니다. nil이면 오류가 발생한 것입니다. 이렇게 하면 예상 가능한 실패 상황에서 예외를 사용하지 않아도 됩니다.
local function openConfig(path)
local f = io.open(path, "r")
if not f then
return nil, "cannot open: " .. path
end
local content = f:read("*a")
f:close()
return content
end
local data, err = openConfig("config.lua")
if not data then
print("Error:", err)
end여러 반환 값으로 값 교환하기
여러 반환 값은 값 교환 문제를 우아하게 해결합니다. 오른쪽 항은 대입보다 먼저 평가되므로 a, b = b, a는 임시 변수 없이 값을 올바르게 서로 교환합니다.
local a, b = 5, 10
print(a, b) -- 5 10
a, b = b, a
print(a, b) -- 10 5
-- Works for three-way rotation too
local x, y, z = 1, 2, 3
x, y, z = z, x, y
print(x, y, z) -- 3 1 2pcall 반환 규칙
pcall(f, ...) 자체가 여러 값을 반환합니다. 첫 번째 값은 불리언이며(성공하면 true, 오류가 발생하면 false), 그 뒤의 값은 f의 반환 값이거나 오류 메시지입니다. 나머지 값을 사용하기 전에 항상 첫 번째 반환 값을 확인해야 합니다.
local function risky(x)
if x < 0 then error("negative input") end
return math.sqrt(x)
end
local ok, result = pcall(risky, 16)
print(ok, result) -- true 4.0
ok, result = pcall(risky, -1)
print(ok, result) -- false input:2: negative input빠른 확인
print((string.find("hello", "ll")))은 무엇을 출력할까요?
복습: 여러 반환 값
핵심 정리:
- 여러 값을 반환하려면
return a, b, c를 사용합니다 - 남는 값은 버리고, 부족한 값은 nil이 됩니다
- 중간 위치의 호출 결과는 하나의 값으로 줄어듭니다
(f())는 정확히 하나의 값을 강제합니다- 동적인 값 목록에는
table.pack/table.unpack을 사용합니다 - 규칙: 실패할 때
nil, errmsg를 반환합니다
자주 묻는 질문
“여러 반환 값” 강의는 무료인가요?
네 — “여러 반환 값” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“여러 반환 값”에서 뭘 배우나요?
하나의 함수 호출에서 여러 값을 반환하고 받습니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“여러 반환 값” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.