학습
Lua 기본 에러 처리
Lua 기본 에러 처리 — 초급
Lua 기본 에러 처리
1. 도입 (왜 배워야 하는가)
Lua에서 에러 처리는 프로그램이 안정적으로 작동하도록 하는 데 필수적인 요소입니다. 실무에서는 사용자에게 더 나은 경험을 제공하기 위해 예기치 않은 상황을 적절하게 처리해야 합니다. 예를 들어, 쇼핑몰 웹사이트에서 사용자가 장바구니에 없는 상품을 구매하려고 할 때, 이를 적절히 처리하지 않으면 프로그램이 갑자기 종료되거나 잘못된 정보를 사용자에게 전달할 수 있습니다. 이러한 경우, 에러 처리를 통해 프로그램의 흐름을 제어하고 사용자에게 명확한 피드백을 제공할 수 있습니다.
에러 처리를 하지 않으면 프로그램이 중단되거나 예기치 않은 결과를 초래할 수 있으며, 이는 사용자에게 신뢰성을 떨어뜨리는 결과를 초래할 수 있습니다.
2. 핵심 개념 설명
에러 처리는 프로그램이 예외적인 상황에서도 안정적으로 작동하도록 돕는 기능입니다. Lua에서는 pcall과 xpcall 함수를 사용하여 에러를 처리할 수 있습니다. 이를 통해 코드의 오류를 감지하고, 오류가 발생했을 때의 대응을 정의할 수 있습니다.
- pcall: "protected call"의 약자로, 함수 호출 시 발생할 수 있는 에러를 안전하게 처리합니다. 비유하자면, 안전벨트를 매고 운전하는 것과 같습니다. 사고가 나더라도 보호받을 수 있습니다.
- xpcall:
pcall과 유사하지만, 에러 핸들러를 추가적으로 정의할 수 있습니다. 이는 마치 안전벨트를 매고 운전하면서 사고가 나면 응급처치를 준비하는 것과 같습니다.
| 용어 | 설명 |
|---|---|
| pcall | 함수 호출 시 발생하는 에러를 안전하게 처리 |
| xpcall | 에러 핸들러를 추가하여 더욱 정교한 에러 처리 |
3. 기본 코드 예제
function divide(a, b)
return a / b
end
local status, result = pcall(divide, 10, 0)
if status then
print("결과:", result)
else
print("에러 발생:", result)
end
에러 발생: attempt to divide by zero
1. divide라는 함수를 정의하고, 두 수를 나누는 기능을 구현합니다.
2. pcall 함수를 사용하여 divide 함수를 호출합니다. 첫 번째 인수는 나누고자 하는 수 10과 0입니다.
3. 나누기 연산에서 0으로 나누려 하므로 에러가 발생합니다.
4. status는 false가 되며, 두 번째 반환 값인 result는 에러 메시지를 포함합니다.
5. 에러가 발생했음을 알리기 위해 "에러 발생:" 메시지와 함께 에러 내용을 출력합니다.
4. 실전 활용 예제
예제 1: 파일 읽기
쇼핑몰에서 상품 정보를 파일에서 읽어올 때, 파일이 존재하지 않는 경우를 처리할 수 있습니다.
function readFile(filename)
local file, err = io.open(filename, "r")
if not file then
return nil, err
end
local content = file:read("*a")
file:close()
return content
end
local status, result = pcall(readFile, "products.txt")
if status then
print("파일 내용:", result)
else
print("에러 발생:", result)
end
예제 2: 사용자 입력 처리
사용자가 입력한 나이를 검증하는 경우:
function checkAge(age)
if age < 0 then
error("나이는 음수가 될 수 없습니다.")
end
return "유효한 나이입니다."
end
local status, result = pcall(checkAge, -5)
if status then
print(result)
else
print("에러 발생:", result)
end
5. 흔한 실수와 주의사항
pcall의 반환값을 잘못 이해하기- 잘못된 코드:
local result = pcall(divide, 10, 0)
print("결과:", result) -- 에러 발생
- 올바른 코드:
local status, result = pcall(divide, 10, 0)
xpcall 사용 local status, result = xpcall(divide, nil, 10, 0)
- 올바른 코드:
local function errorHandler(err)
return "커스텀 에러: " .. err
end
local status, result = xpcall(divide, errorHandler, 10, 0)
6. 정리
- 에러 처리는 프로그램의 안정성을 높이며, 사용자 경험을 개선합니다.
- Lua에서
pcall과xpcall을 사용하여 에러를 안전하게 처리할 수 있습니다. - 에러 발생 시 적절한 피드백을 제공하여 프로그램의 신뢰성을 높일 수 있습니다.
- 에러 핸들링 코드를 작성할 때는 반환값을 정확히 이해하고 사용하는 것이 중요합니다.
다음에 학습하면 좋은 주제는 Lua의 테이블과 메타테이블입니다. 이를 통해 더 복잡한 데이터 구조와 객체 지향 프로그래밍을 구현할 수 있습니다.