
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
오류나 궁금하신점은
아래 댓글로 알려주시면 감사하겠습니다.
'TIPS' 카테고리의 다른 글
Java 정렬(sort) 기초 가이드 (0) | 2025.04.07 |
---|---|
[jQuery] 제이쿼리 기초 및 사용방법 part.5 text,append,prepend,before,after (4) | 2023.09.13 |
[jQuery] 제이쿼리 기초 및 사용방법 part.4 CSS vs Animate (0) | 2023.09.12 |
[jQuery] 제이쿼리 기초 및 사용방법 part.3 이벤트 종류 (0) | 2023.09.12 |
[jQuery] 제이쿼리 기초 및 사용방법 part.2 hide, show, toggle (0) | 2023.09.12 |