학습
Ruby 루비의 예외와 사용법
Ruby 루비의 예외와 사용법 — 중급
루비의 예외와 사용법
1. 도입 (왜 배워야 하는가)
루비에서 예외 처리(Exception Handling)는 코드를 안정적으로 만드는 중요한 기법입니다. 실무에서 프로그램이 예기치 않은 오류로 중단되면 사용자 경험이 나빠지고, 시스템의 신뢰성이 떨어집니다. 예외 처리를 통해 오류를 사전에 예측하고, 적절한 대처를 할 수 있기 때문에, 개발자는 더욱 견고한 소프트웨어를 만들 수 있습니다.
예를 들어, 쇼핑몰 애플리케이션에서 사용자가 상품을 장바구니에 추가하는 과정에서, 재고가 부족할 경우를 생각해보세요. 이때 예외 처리가 없다면, 프로그램이 갑자기 종료되거나 사용자에게 불친절한 오류 메시지를 보여주게 됩니다. 따라서 예외 처리의 필요성을 이해하고 활용하는 것은 매우 중요합니다.
2. 핵심 개념 설명
예외란 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 의미합니다. 이를 처리하는 방법이 바로 예외 처리입니다.
- 예외 처리 (Exception Handling): 프로그램의 정상적인 흐름을 방해하는 오류를 감지하고, 해당 오류에 대한 처리를 정의하는 과정입니다.
- raise: 예외를 발생시키는 키워드입니다.
- rescue: 발생한 예외를 처리할 때 사용하는 키워드입니다.
실생활 비유로 설명하자면, 예외 처리는 안전벨트를 착용하는 것과 비슷합니다. 안전벨트는 사고가 발생했을 때의 안전장치 역할을 하며, 예외 처리 또한 프로그램에서 문제가 발생했을 때의 안전장치 역할을 합니다.
| 용어 | 설명 |
|---|---|
| 예외 | 프로그램 실행 중 발생할 수 있는 오류 |
| raise | 예외를 발생시키는 키워드 |
| rescue | 예외를 처리하는 키워드 |
3. 기본 코드 예제
다음은 루비에서 예외를 처리하는 기본적인 코드 예제입니다.
def divide(a, b)
raise "0으로 나눌 수 없습니다." if b == 0 # b가 0일 경우 예외 발생
a / b # 나누기 연산
end
begin
puts divide(10, 0) # 0으로 나누기 시도
rescue => e
puts "예외 발생: #{e.message}" # 발생한 예외 메시지 출력
end
실행 결과:
예외 발생: 0으로 나눌 수 없습니다.
def divide(a, b): divide라는 메서드를 정의합니다.raise "0으로 나눌 수 없습니다." if b == 0: b가 0이면 예외를 발생시킵니다.a / b: a를 b로 나누는 연산을 수행합니다.begin: 예외 처리를 시작하는 블록입니다.puts divide(10, 0): divide 메서드를 호출하며 0으로 나누기를 시도합니다.rescue => e: 예외가 발생하면 이 블록으로 이동하고, 예외 객체를 변수 e에 저장합니다.puts "예외 발생: #{e.message}": 발생한 예외의 메시지를 출력합니다.4. 실전 활용 예제
예제 1: 파일 읽기
쇼핑몰에서 상품 정보를 파일에서 읽어오는 경우를 생각해봅시다.
begin
file = File.open("products.txt") # 파일 열기
puts file.read # 파일 내용 읽기
rescue Errno::ENOENT => e
puts "파일을 찾을 수 없습니다: #{e.message}" # 파일이 없을 경우 처리
ensure
file.close if file # 파일이 열려있다면 닫기
end
예제 2: 데이터베이스 연결
데이터베이스에 연결할 때의 예외 처리입니다.
begin
db = connect_to_database # 데이터베이스 연결 시도
rescue DatabaseConnectionError => e
puts "데이터베이스에 연결할 수 없습니다: #{e.message}" # 연결 실패 시 처리
end
5. 흔한 실수와 주의사항
실수 1: 예외를 잡지 않기
예외 처리 블록을 사용하지 않으면 프로그램이 중단될 수 있습니다.
# 잘못된 코드
puts divide(10, 0) # 예외 발생으로 프로그램 중단
실수 2: 다루지 않은 예외
모든 예외를 포괄적으로 처리하지 않으면 특정 예외가 발생했을 때 프로그램이 중단될 수 있습니다.
begin
# 특정 예외만 처리
rescue SpecificError => e
puts e.message
end
# 올바른 예외 처리
rescue => e # 모든 예외를 처리
puts e.message
end
6. 정리
raise와 rescue 키워드를 사용하여 예외를 발생시키고 처리할 수 있습니다.