자바 - 내장 예외
안녕하세요, 자바를 배우고자 하는 여러분! 오늘 우리는 자바의 내장 예외에 대해 흥미로운 세상으로 뛰어들어 볼 거예요. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 이 중요한 주제를 안내해 드리게 되어 기쁩니다. 그럼 여러분의 좋아하는 음료를 마시면서 편안하게 앉아, 이 코딩 모험을 함께 시작해 보세요!
예외는 무엇인가요?
자바의 내장 예외에 대해 구체적으로 이야기하기 전에, 기본 개념을 알아보겠습니다. 상상해 보세요, 맛있는 요리를 만들기 위해 레시피를 단계별로 따르고 있는데, 갑자기 중요한 재료가 떨어졌다는 것을 깨닫게 됩니다. 이는 프로그래밍에서 예외가 발생할 때와 비슷합니다 - 예상치 못한 이벤트가 프로그램의 정상적인 흐름을 방해합니다.
자바에서 예외는 이러한 예상치 못한 상황을 나타내는 객체입니다. 예외는 코드에서 무언가가 잘못되었을 때 울리는 작은 경고음과 같습니다. 하지만 걱정 마세요 - 자바는 이러한 상황을 처리할 수 있는 도구를 제공해줍니다.
자바 내장 예외의 유형
자바는 다양한 내장 예외를 제공하며, 이를 깔끔하게 계층 구조로 정리해놓았습니다. 이 가족 트리의 정상에는 Throwable
클래스가 있으며, 이 클래스는 두 가지 주요 자식을 가지고 있습니다: Error
와 Exception
.
Errors
에러는 일반적으로 프로그램의 통제 밖에서 발생하는 심각한 문제입니다. 예를 들어, 컴퓨터의 메모리가 부족해지면 자바는 OutOfMemoryError
를 발생시킬 수 있습니다. 프로그래머로서는 일반적으로 에러를 catch하거나 처리하지 않습니다.
Exceptions
반면에 예외는 종종 예상하고 처리할 수 있는 문제입니다. 예외는 두 가지 범주로 나뉩니다:
-
체크ked 예외: 컴파일러가 당신에게 처리를 강요하는 예외입니다. 이를 catch하거나 메서드가 던지는 것을 선언해야 합니다.
-
체크되지 않은 예외: 컴파일러가 처리를 강요하지 않는 예외입니다. 이들은 일반적으로 프로그래밍 오류를 나타냅니다.
자바에서 일반적인 내장 예외를 몇 가지 살펴보겠습니다:
예외 유형 | 범주 | 설명 |
---|---|---|
NullPointerException | 체크되지 않은 | null 참조를 사용할 때 발생 |
ArrayIndexOutOfBoundsException | 체크되지 않은 | 유효하지 않은 인덱스로 배열 요소에 접근할 때 발생 |
ArithmeticException | 체크되지 않은 | 除法などの算数 오류가 발생할 때 발생 |
FileNotFoundException | 체크ked | 존재하지 않는 파일에 접근할 때 발생 |
IOException | 체크ked | I/O 연산이 실패할 때 발생 |
ClassNotFoundException | 체크ked | 클래스가 찾이지 않을 때 발생 |
자바 내장 예외의 예제
이제 손을 dirt하고 예제 코드를 통해 이러한 예외를 실제로 보겠습니다!
1. NullPointerException
public class NullPointerExample {
public static void main(String[] args) {
String str = null;
System.out.println(str.length()); // 이는 NullPointerException을 던집니다
}
}
이 예제에서, 우리는 null 문자열에 length()
메서드를 호출하고 있습니다. 자바는 이를 처리할 수 없어 NullPointerException
를 던집니다. 마치 상상의 문자열의 길이를 측정하려는 것처럼, 이는 의미가 없습니다!
2. ArrayIndexOutOfBoundsException
public class ArrayIndexExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // 이는 ArrayIndexOutOfBoundsException을 던집니다
}
}
여기서 우리는 배열에 있는 4번째 요소(인덱스 3)에 접근하려고 합니다. 배열에만 세 개의 요소가 있는데, 이는 마치 네 번째 무스케테어를 찾으려는 것과 같습니다!
3. ArithmeticException
public class ArithmeticExample {
public static void main(String[] args) {
int result = 10 / 0; // 이는 ArithmeticException을 던집니다
System.out.println(result);
}
}
이 예제에서, 우리는 0으로 나누려고 합니다. 이는 수학과 프로그래밍에서 모두 금지된 행동입니다. 마치 피자를 0 조각으로 나누려는 것처럼, 이는 계산되지 않습니다!
4. FileNotFoundException (체크ked 예외)
import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
public class FileNotFoundExample {
public static void main(String[] args) {
try {
File file = new File("nonexistent.txt");
FileReader fr = new FileReader(file);
} catch (FileNotFoundException e) {
System.out.println("Oops! The file was not found.");
}
}
}
이 예제에서, 우리는 존재하지 않는 파일을 읽으려고 합니다. 자바는 이 가능성을 처리하도록 요청하여 try-catch 블록을 사용합니다. 마치 서랍에 없는 책을 읽으려는 것처럼, 이를 찾을 계획이 필요합니다!
예외 처리
이제 예외를 실제로 보고, 어떻게 처리하는지 이야기해 보겠습니다. 자바에서는 try
, catch
, 그리고 finally
블록을 조합하여 예외를 관리합니다.
public class ExceptionHandlingExample {
public static void main(String[] args) {
try {
// 예외가 발생할 수 있는 코드
int result = 10 / 0;
} catch (ArithmeticException e) {
// 예외를 처리하는 코드
System.out.println("Oops! You can't divide by zero.");
} finally {
// 예외가 발생했든 안 했든 항상 실행되는 코드
System.out.println("This will always be printed.");
}
}
}
이 예제에서 우리는:
-
try
블록에서 잠재적으로 위험한 코드를 실행합니다. - 발생할 수 있는
ArithmeticException
을 catch하고 처리합니다. -
finally
블록을 사용하여 예외가 발생했든 안 했든 항상 실행되는 코드를 보장합니다.
마치 타이트로프를 걸을 때 안전망을 가지고 있는 것처럼, 당신은 그것을 사용하기 바라지만, 필요할 때는 항상 준비되어 있어야 합니다!
결론
이제 여러분! 우리는 자바의 내장 예외를 통해 여정을 마쳤습니다. 예외를 이해하고, 실제로 보고, 처리하는 방법을 배웠습니다. 예외는 두려워할 것은 아니며, 우리가 더 견고하고 신뢰할 수 있는 코드를 작성하는 데 도움이 되는 도구입니다.
자바 프로그래밍 여정을 계속하면서, 더 많은 예외를 만나고 더 복잡한 처리 방법을 배울 것입니다. 하지만 지금은 이 중요한 단계를 밟아서 자랑할 만합니다.
계속 연습하고, 호기심을 가지고, 실수를 두려워하지 마세요 - 이는 우리가 프로그래머로 성장하는 방법입니다. 행복하게 코딩하시고, 예외가 항상 잡히기를 바랍니다!
Credits: Image by storyset