자바 - Throws와 Throw: 예외 처리 이해
안녕하세요, 미래의 자바 프로그래머 여러분! 오늘은 자바에서 예외 처리의 세계로 흥미로운 여행을 떠날 거예요. 특히, throws와 throw 키워드에 집중할 거예요. 프로그래밍에 새로운 사람이라도 걱정 마세요; 저는 수년 동안 수많은 학생들을 가르쳐왔던 것처럼 단계별로 안내해 드릴 거예요. 그럼 시작해보죠!

예외란 무엇인가요?
throws와 throw에 들어가기 전에, 예외가 무엇인지 빠르게 재고를 들어보죠. 레시피에 따라 요리를 만들고 있는 중에, 중요한 재료가 없어서 불안정해지는 상황을 상상해보세요. 그것은 프로그래밍에서 예외와 비슷합니다: 프로그램의 정상적인 흐름을 방해하는 예상치 못한 이벤트입니다.
throws와 throw 이해
throws 키워드
throws 키워드는 메서드 선언에서 해당 메서드가 예외를 발생시킬 수 있는 하나 이상의 예외 유형을 나타냅니다. 이는 "Caution: Wet Floor" 식별지를 둘러서는 것과 같아요 - 이 메서드를 사용하는 사람에게 예외가 발생할 수 있음을 경고하는 것입니다.
throw 키워드
반면, throw는 예외를 실제로 생성하고 발생시키는 데 사용됩니다. 이는 실제로 바닥에 물을 새기는 것과 같아요 - 예외 상황을 만들어냅니다.
문법
둘 다의 문법을 살펴보죠:
// 메서드 선언에서 throws 사용
public void myMethod() throws ExceptionType {
// 메서드 본문
}
// throw를 사용하여 예외 생성
throw new ExceptionType("에러 메시지");
자바 Throws와 Throw 예제
throws와 throw를 설명하기 위해 간단한 예제를 시작해보죠:
public class DivisionExample {
public static double divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("zero으로 나눌 수 없습니다!");
}
return (double) a / b;
}
public static void main(String[] args) {
try {
System.out.println(divide(10, 2)); // 이것은 잘 작동합니다
System.out.println(divide(10, 0)); // 이것은 예외를 발생시킵니다
} catch (ArithmeticException e) {
System.out.println("에러가 발생했습니다: " + e.getMessage());
}
}
}
이를 분석해보죠:
-
divide메서드를ArithmeticException을throws로 선언합니다. - 메서드 내부에서
b가 0이면 새로운ArithmeticException을throw합니다. -
main메서드에서try-catch블록을 사용하여 잠재적인 예외를 처리합니다.
이 코드를 실행하면 다음과 같은 결과를 볼 수 있습니다:
5.0
에러가 발생했습니다: zero으로 나눌 수 없습니다!
더 많은 예제
예제 1: 커스텀 예외
커스텀 예외를 만들고 사용해보죠:
class AgeException extends Exception {
public AgeException(String message) {
super(message);
}
}
public class VotingSystem {
public static void checkEligibility(int age) throws AgeException {
if (age < 18) {
throw new AgeException("투표하려면 18세 이상이어야 합니다.");
} else {
System.out.println("투표에 가입할 수 있습니다!");
}
}
public static void main(String[] args) {
try {
checkEligibility(20); // 이것은 괜찮습니다
checkEligibility(15); // 이것은 예외를 발생시킵니다
} catch (AgeException e) {
System.out.println("에러: " + e.getMessage());
}
}
}
이 예제는 커스텀 예외를 생성하고 사용하는 방법을 보여줍니다.
예제 2: 여러 예외 처리
여러 예외를 처리하는 방법을 살펴보죠:
import java.io.*;
public class FileReadExample {
public static void readFile(String filename) throws FileNotFoundException, IOException {
FileReader file = new FileReader(filename);
BufferedReader reader = new BufferedReader(file);
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close();
}
public static void main(String[] args) {
try {
readFile("example.txt");
} catch (FileNotFoundException e) {
System.out.println("에러: 파일을 찾을 수 없습니다.");
} catch (IOException e) {
System.out.println("에러: 파일을 읽는 데 문제가 발생했습니다.");
}
}
}
이 예제는 메서드가 발생시킬 수 있는 여러 유형의 예외를 처리하는 방법을 보여줍니다.
최상의 관행
- 구체적인: 오직 해당 에러 조건에 적합한 예외만 발생시킵니다.
- 잘 문서화: 메서드의 Javadoc에 항상 메서드가 발생시킬 수 있는 예외를 문서화합니다.
-
처리하거나 선언: 예외를
try-catch블록으로 처리하거나throws로 선언합니다. - 과도하게 사용하지 마세요: 정상적인 흐름 제어에 예외를 사용하지 마세요. 예외는 예상치 못한 상황에만 사용해야 합니다.
결론
throws와 throw를 이해하는 것은 자바에서 올바른 예외 처리에 중요합니다. 이를 통해 더 견고하고 에러에 저항할 수 있는 코드를 작성할 수 있습니다. 기억해요, 예외는 여러분의 친구입니다 - 문제를 예측하고 우아하게 처리하는 데 도움이 됩니다.
자바 여행을 계속하면서 예외 처리가 얼마나 중요한지 알게 될 것입니다. 계속 연습하면서 예외 처리가 두뇌로 내려올 거예요.
코딩 잘하시고, 미래의 자바 마스터 여러분!快乐编码!
Credits: Image by storyset
