Java 예외처리
Java 예외처리
Java 예외 처리는 프로그램 실행 중 발생할 수 있는 오류나 예기치 않은 상황에 대비하기 위해 코드를 작성하는 것을 의미합니다. 예외 처리는 프로그램의 안정성을 높이고, 오류 발생 시 적절한 대처를 가능하게 합니다. 주요 개념과 키워드를 중심으로 Java 예외 처리에 대해 설명하겠습니다.
1. 오류와 예외
- 오류 (Error): 시스템 수준에서 발생하는 심각한 문제로, 일반적으로 프로그램이 복구할 수 없습니다. 예를 들어, OutOfMemoryError나 StackOverflowError 등이 있습니다.
- 예외 (Exception): 프로그램 실행 중 발생할 수 있는 문제로, 프로그램이 이를 처리하고 복구할 수 있습니다. 예외는 다시 두 가지로 나뉩니다:
- Checked Exception: 컴파일러가 예외 처리를 강제하는 예외입니다. 예를 들어, IOException, SQLException 등이 있습니다.
- Unchecked Exception: 컴파일러가 예외 처리를 강제하지 않는 예외입니다. 주로 프로그래머의 실수로 발생하며, RuntimeException의 하위 클래스입니다. 예를 들어, NullPointerException, ArrayIndexOutOfBoundsException 등이 있습니다.
2. 예외 처리 구문
Java에서는 try, catch, finally 블록을 사용하여 예외를 처리합니다.
try-catch-finally 구문
- try: 예외가 발생할 가능성이 있는 코드를 포함합니다.
- catch: 예외가 발생했을 때 실행할 코드를 포함합니다.
- finally: 예외 발생 여부와 상관없이 항상 실행되는 코드를 포함합니다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType1 e1) {
// 예외 처리 코드
} catch (ExceptionType2 e2) {
// 예외 처리 코드
} finally {
// 항상 실행되는 코드
}
예제
public class ExceptionTest {
public static void main(String[] args) {
int n1 = 12, n2 = 0;
try {
System.out.println(n1 / n2);
} catch (ArithmeticException e) {
System.out.println("예외 발생: " + e.getMessage());
} finally {
System.out.println("프로그램 종료");
}
}
}
3. throw와 throws
- throw: 개발자가 직접 예외를 발생시킬 때 사용합니다.
- throws: 메서드 선언부에 사용되어, 해당 메서드가 특정 예외를 던질 수 있음을 명시합니다.
throw 예제
public class ThrowTest {
public static void main(String[] args) {
try {
throwTest(12, 0);
} catch (ArithmeticException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void throwTest(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("0으로 나눌 수 없습니다.");
}
System.out.println(a / b);
}
}
4. 사용자 정의 예외
개발자가 필요에 따라 사용자 정의 예외를 만들 수 있습니다. 이는 Exception 클래스를 상속받아 구현합니다.
사용자 정의 예외 예제
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public class CustomExceptionTest {
public static void main(String[] args) {
try {
validateAge(15);
} catch (CustomException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
public static void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("나이가 18세 미만입니다.");
}
System.out.println("나이가 적절합니다.");
}
}
결론
Java 예외 처리는 프로그램의 안정성을 높이고, 오류 발생 시 적절한 대처를 가능하게 합니다. try, catch, finally 블록을 사용하여 예외를 처리하고, throw와 throws 키워드를 사용하여 예외를 발생시키거나 전달할 수 있습니다. 또한, 필요에 따라 사용자 정의 예외를 만들어 사용할 수 있습니다. 이러한 예외 처리 메커니즘을 통해 프로그램의 신뢰성과 유지보수성을 향상시킬 수 있습니다.
Citations: [1] https://velog.io/%40mooh2jj/자바-예외처리try-catch-throw-throws [2] https://adjh54.tistory.com/362 [3] https://developer-r.tistory.com/54 [4] https://blog.naver.com/hj_kim97/222389015969 [5] https://jinyoungchoi95.tistory.com/38
예외처리를 하지 않으면 어떤 문제가 발생하나요
예외 처리를 하지 않으면 여러 가지 문제가 발생할 수 있습니다. 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 요소입니다. 예외를 처리하지 않을 경우 발생할 수 있는 주요 문제들을 살펴보겠습니다.
1. 프로그램의 비정상 종료
예외가 발생했을 때 이를 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다. 이는 사용자 경험을 저해하고, 데이터 손실이나 시스템 불안정을 초래할 수 있습니다.
예제:
public class ExceptionTest {
public static void main(String[] args) {
int n1 = 12, n2 = 0;
System.out.println(n1 / n2); // ArithmeticException 발생
System.out.println("이 코드는 실행되지 않습니다.");
}
}
위 코드에서 ArithmeticException이 발생하면 프로그램이 비정상적으로 종료되고, 이후의 코드는 실행되지 않습니다.
2. 리소스 누수
예외가 발생했을 때 적절히 처리하지 않으면 파일, 네트워크 연결, 데이터베이스 연결 등의 리소스가 해제되지 않고 누수될 수 있습니다. 이는 시스템 자원을 고갈시키고, 성능 저하를 초래할 수 있습니다.
예제:
public class ResourceLeakExample {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("somefile.txt");
// 파일 읽기 작업
} catch (IOException e) {
e.printStackTrace();
}
// 예외 발생 시 파일이 닫히지 않음
}
}
위 코드에서 예외가 발생하면 파일 스트림이 닫히지 않아 리소스 누수가 발생할 수 있습니다.
3. 데이터 손실
예외가 발생했을 때 이를 처리하지 않으면 데이터 손실이 발생할 수 있습니다. 예를 들어, 파일 쓰기 작업 중 예외가 발생하면 데이터가 손실될 수 있습니다.
예제:
public class DataLossExample {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("output.txt");
writer.write("데이터 쓰기 중 예외 발생");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
// 예외 발생 시 데이터가 손실될 수 있음
}
}
4. 디버깅 어려움
예외를 처리하지 않으면 예외가 발생한 원인을 파악하기 어려워집니다. 이는 디버깅을 복잡하게 만들고, 문제 해결에 많은 시간을 소요하게 합니다.
5. 사용자 경험 저하
예외를 처리하지 않으면 사용자에게 친절한 오류 메시지를 제공할 수 없습니다. 이는 사용자 경험을 저해하고, 사용자가 프로그램을 신뢰하지 않게 만들 수 있습니다.
6. 시스템 불안정
예외를 처리하지 않으면 시스템이 불안정해질 수 있습니다. 이는 다른 시스템 구성 요소에 영향을 미치고, 전체 시스템의 신뢰성을 저하시킬 수 있습니다.
예외 처리의 중요성
예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 요소입니다. 예외를 적절히 처리하면 프로그램이 비정상적으로 종료되지 않고, 리소스 누수나 데이터 손실을 방지할 수 있습니다. 또한, 사용자에게 친절한 오류 메시지를 제공하여 사용자 경험을 향상시킬 수 있습니다.
예외 처리 예제
public class ExceptionHandlingExample {
public static void main(String[] args) {
try {
int n1 = 12, n2 = 0;
System.out.println(n1 / n2);
} catch (ArithmeticException e) {
System.out.println("예외 발생: " + e.getMessage());
} finally {
System.out.println("프로그램 종료");
}
}
}
위 코드에서 ArithmeticException이 발생하면 예외가 처리되고, 프로그램이 정상적으로 종료됩니다.
참고 자료
- Common Mistakes to Avoid in Java Exceptions - Stackify
- What happens if an exception is not handled in a java program? - Tutorialspoint
- Java Exceptions that cannot be handled - Stack Overflow
- Exception Handling in Java - Baeldung
예외 처리를 통해 프로그램의 안정성과 신뢰성을 높이고, 사용자 경험을 향상시킬 수 있습니다. 예외를 적절히 처리하는 것은 모든 Java 개발자가 반드시 숙지해야 할 중요한 기술입니다.
Citations: [1] https://stackify.com/common-mistakes-handling-java-exception/ [2] https://www.tutorialspoint.com/what-happens-if-an-exception-is-not-handled-in-a-java-program [3] https://stackoverflow.com/questions/29370541/java-exceptions-that-cannot-be-handled [4] https://www.baeldung.com/java-exceptions [5] https://www.youtube.com/watch?v=WnR6DpRBMEE