본문 바로가기

TIPS

Java 예외 처리 (try-catch) 기초 가이드

728x90
반응형
SMALL

 

 

1. 예외(Exception)란?

예외(Exception) 는 프로그램 실행 중 발생하는 오류이다.

예를 들어, 0으로 나누기, 배열의 범위를 벗어난 접근, 잘못된 형 변환 등이 있다.

이러한 예외를 적절히 처리하지 않으면 프로그램이 강제 종료될 수 있다!!!

예외 처리의 핵심:

  • try : 예외가 발생할 가능성이 있는 코드 블록
  • catch : 예외 발생 시 실행되는 코드 블록
  • finally : 예외 발생 여부와 관계없이 항상 실행되는 코드 블록

2. 예제 코드 분석

public class ExceptionExample {
    public static void main(String[] args) {
        /***********************************************************************/
        /************************** try catch 연습 ******************************/
        /***********************************************************************/
        int cycle = 0;
        try {
            for (int i = 10; i >= -1; i--) {  // i가 10부터 -1까지 감소
                cycle = cycle + 1;
                System.out.println(cycle + "번째 사이클");
                
                int x = 100;
                long result;
                
                System.out.println(x + " / " + i);
                result = x / i;  // 여기서 0으로 나누는 오류 발생 가능
                System.out.println(" = " + result);
                System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
            }
        } catch (Exception e) {
            System.out.println(e);  // 예외 메시지 출력
            System.out.println("값 오류!!!!!");  // 예외 발생 시 알림
        } finally {
            System.out.println("finally 종료");  // 항상 실행됨
        }
    }
}
 

3. 실행 결과 예상

정상 동작 시 (i가 0이 아닐 때)

 

1번째 사이클
100 / 10
 = 10
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2번째 사이클
100 / 9
 = 11
...
 

예외 발생 시 (i = 0일 때)

...
10번째 사이클
100 / 1
 = 100
11번째 사이클
100 / 0
java.lang.ArithmeticException: / by zero
 오류!!!!!
finally 종료
 

i = 0이 되는 순간 result = x / i에서 100 / 0을 수행하게 되고, "ArithmeticException: / by zero" 예외가 발생합니다.

그러나 catch 블록에서 예외를 처리하기 때문에 프로그램이 강제 종료되지 않고 "값 오류!!!!!" 메시지를 출력한 후, finally 블록을 실행한 뒤 종료됩니다.

 


4. 예외 처리에서 주의할 점

❌ 1) 예외를 무조건 Exception으로 받지 말자

위 코드에서는 catch (Exception e)로 모든 예외를 한꺼번에 처리하고 있다.

하지만 이렇게 하면 어떤 예외가 발생했는지 명확히 알기 어렵고, 불필요한 예외까지 잡아버릴 수 있다.

해결 방법:

예외를 구체적으로 처리하는 것이 좋다.

try {
    result = x / i;
} catch (ArithmeticException e) {  // 특정 예외 처리
    System.out.println("0으로 나눌 수 없습니다!");
} catch (Exception e) {  // 나머지 예외 처리
    System.out.println("알 수 없는 오류 발생");
}
 

❌ 2) finally 블록에서 중요한 로직을 실행하지 말자!

finally 블록예외 발생 여부와 상관없이 항상 실행된다

이 블록에서 중요한 로직(예: 데이터베이스 연결 해제, 파일 닫기 등)을 실행할 경우, 예외가 발생해도 실행되므로 주의해야 합다.

 

 

✅ 사용 예시:

 

finally {
    System.out.println("프로그램이 종료됩니다.");
}
 

5. 예외 처리를 더 잘하는 꿀팁

1) try-catch를 최소화하고, 예외가 발생할 가능성이 있는 부분만 감싸기

잘못된 예시 (너무 넓은 범위를 감싸는 경우):

try {
    int a = 10;
    int b = 20;
    int c = a + b;  // 이 부분은 예외 발생 가능성이 없음
    System.out.println(c);
    int d = 100 / 0;  // 예외 발생 가능
} catch (Exception e) {
    System.out.println("오류 발생!");
}
 

👉 올바른 예시 (필요한 부분만 try-catch로 감싸기):

int a = 10;
int b = 20;
System.out.println(a + b);  // 예외 발생 가능성이 없는 부분

try {
    int d = 100 / 0;  // 예외 발생 가능
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없습니다.");
}
 

2) 예외 메시지를 잘 활용하자

catch (ArithmeticException e) {
    System.out.println("오류 발생: " + e.getMessage());
}
 

이렇게 하면 예외 메시지를 확인할 수 있어 디버깅이 쉬워진다.

 

+a

3) 자주 발생하는 예외 유형을 알아두자

  • NullPointerException : null 값을 참조할 때 발생
  • ArrayIndexOutOfBoundsException : 배열 인덱스를 벗어난 경우
  • NumberFormatException : 문자열을 숫자로 변환할 때 발생 (Integer.parseInt("ABC"))
  • ClassCastException : 잘못된 형변환 시 발생

 

 


6. 마무리

이번 포스팅에서는 Java의 try-catch-finally 문을 활용한 예외 처리에 대해 살펴보았다.

코드를 짜다보면 굳이? 라는 생각을 할 수 있지만

예외 처리는 프로그램이 예기치 않게 종료되는 것을 막고, 안정성을 높이는 아주아주 중요한 요소이다!!

고로 코드를 짤때 항상 예외 발생여부를 염두해두고 코드를 짜기 바란다!

 

 

📌 정리

✅ 예외는 try-catch-finally로 처리한다.

✅ catch에서 너무 넓은 범위를 잡지 말고, 예외를 구체적으로 처리하자.

✅ finally 블록은 꼭 필요한 경우에만 사용하자.

✅ 자주 발생하는 예외를 숙지하고, 디버깅 시 예외 메시지를 활용하자.

 

 

 

 

학스의 개발일지

일상과 코딩 그 사이 어딘가에있는 블로그.. 블로거이자 빅데이터개발자 학스 입니다 JAVA, jQuery, PostgreSQL, MySQL, HIVE, Hadoop 더 많은 정보는 깃허브 주소 https://github.com/hacs2772 를 방문해주세요

hacs2772.tistory.com

 

 

오류나 궁금하신점은
아래 댓글로 알려주시면 감사하겠습니다.

 

 

 

728x90
반응형
LIST