250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jvm
- Interface
- 자바
- 깃헙
- 캡슐화
- 함바그
- 메모리구조
- validation
- 스프링부트
- 스파르타사전캠프
- Framework
- til #데이터베이스 #sql
- 스터디카페
- 레퍼클래스
- 요시
- Java
- 내일배움캠프
- 프레임워크
- springboot
- 깃
- 스파르타코딩클럽
- 스파르타코딩클럽 #개발자 #백엔드
- static
- 사전캠프
- 스파르타코딩클럽 #사전캠프
- 키오스크
- Til
- Spring
- optional
- 피드백
Archives
- Today
- Total
John's Code Journey
[TIL] 예외처리(Exception) 본문
728x90
8일차 오늘은 자바 3주차 강의를 수강했다.
내용이 어렵고 2주차 자바를 복습하느라 3주차를 다 듣지는 못했다.
예외(Exception)란?
- 예외는 프로그램 실행 중 예상하지 못한 상황이 발생하는 것을 의미합니다.→ 대표적인 산술 예외: 10 / 0 (0 으로 나누기)
- → 커피 쏟기
- 의도적으로 예외를 발생시킬 때는 throw 키워드를 통해 발생시킵니다.
- 예외를 처리하지 않으면 프로그램이 중단될 수 있습니다.
- 그래서 예외처리(try-catch)를 통해 프로그램이 안정적으로 실행되게 할 수 있습니다.
의도하지 않은 예외
- 아래 코드에서 10 / 0 연산을 수행하면서 ArithmeticException (산술예외)가 발생합니다.
- 0 으로 나누는 연산은 허용되지 않음으로 프로그램이 비정상적으로 종료됩니다.
- 예외를 처리하지 않으면 이후 코드는 실행되지 않습니다.
public class Main {
public static void main(String[] args) {
System.out.println("프로그램 시작");
int result = 10 / 0; // 예외 발생
System.out.println("이 문장은 실행되지 않음");
}
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
at chapter3.exception.Main.main(Main.java:8)
Process finished with exit code 1
의도적인 예외 - throw
- 특정 조건에서 의도적으로 예외를 발생시킬 수도 있습니다.
- 비즈니스 규칙을 위반한 경우(미성년자접근)
- 아래 코드에서 age < 18 조건을 만족하면 IllegalArgumentException 을 발생시킵니다.
- throw 를 활용하면 특정 상황에서 예외를 명확하게 정의하고 제어할 수 있습니다.
int age = 10;
if(age < 18) {
throw new IllegalArgumentException("미성년자는 접근할 수 없습니다.");
// age가 18보다 작은게 맞기에 if문을 통과해서 throw에 접근했음
}
System.out.println("프로그램 종료");
예외 구조와 종류
- RuntimeException - UncheckedException
- RuntimeException 을 상속받는 모든 예외를 UncheckedException 이라고 합니다.
- 예외처리를 컴파일러가 확인하지 않습니다.
- Exception - CheckedException
- Exception 클래스를 직접 상속받는 모든 예외를 CheckedException 이라고합니다. RuntimeException과 RuntimeException 을 상속받은 예외는 제외합니다.
- 예외처리를 컴파일러가 확인해 줍니다.
RuntimeException - UncheckedException
- 컴파일러가 예외 처리를 강제하지 않는 예외입니다.
- 예외 처리를 하지 않아도 컴파일 오류(빨간 줄) 가 발생하지 않습니다.
- 처리되지 않은 예외는 계속 프로그램 시작 지점까지 전파됩니다.
- 끝내 예외가 처리되지 않으면 프로그램이 비정상적으로 종료됩니다.
- RuntimeException 을 상속받는 모든 예외를 UncheckedException 이라고 합니다.
Exception - CheckedException
- Exception 클래스를 직접 상속받는 모든 예외를 CheckedException 이라고 합니다.
- RuntimeException 을 상속받는 예외는 제외.
- 컴파일러가 예외 처리를 강제하는 예외입니다.
- 예외 처리를 하지 않으면 “컴파일 오류가 발생한다(코드에 빨간줄)” 라고 이해하시면 쉽습니다.
- 반드시 try-catch로 예외를 처리하거나 throws 키워드를 사용해야 합니다. → throws 로 예외 처리의 책임을 호출자에게 전가할 수 있습니다
정리
- 예외가 발생하고 처리되지 않으면 프로그램이 비정상적으로 종료될 수 있기 때문에 꼭 예외 처리는 필수입니다.
- CheckedException 은 컴파일러를 통해 개발자에게 반드시 처리해야 하는 예외를 알려줄 수 있습니다.
- UncheckedException 은 개발자가 충분히 예측하고 방지할 수 있는 경우 사용합니다.
- → 숫자를 0으로 나누는 오류 등은 코드 검토로 충분히 예방 가능합니다. → 이런 예외 처리까지 CheckedException 으로 처리하도록 강제한다면 모든 예외 상황을 처리해야 하는 답답한 상황이 벌어져 개발 생산성이 저하되고 불필요한 코드가 많아질 수 있습니다.
package chapter3.exception;
public class ExceptionPractice {
// 1. 언체크 예외 호출 예시
// public void callUncheckedException() {
// try {
// if (true) {
// System.out.println("언체크 예외 발생");
// throw new RuntimeException(); // 언체크 예외는 try-catch로 처리해야 함
// }
// } catch (RuntimeException e) {
// System.out.println("언체크 예외 처리");
// }
// }
// 2. 체크 예외 호출 예시
public void callCheckedException() throws Exception {
// 여기에 throws를 쓰면 메서드를 호출한 상위메서드에서 처리할거라는 뜻
if (true) {
System.out.println("체크 예외 발생");
throw new Exception();
}
// try {
// if (true) {
// System.out.println("체크 예외 발생");
// throw new Exception(); // 체크 예외는 반드시 try-catch로 처리해야 함
// }
// } catch (Exception e) {
// System.out.println("체크 예외 처리");
// }
}
}
package chapter3.exception;
public class Main {
public static void main(String[] args) {
// 1. 의도하지 않은 예외
// System.out.println("시작");
// int ret = 10 / 0;
// System.out.println("ret = " + ret);
// System.out.println("프로그램 종료");
// 2. 의도적인 예외 - throw
// int age = 10;
// if(age < 18) {
// throw new IllegalArgumentException("미성년자는 접근할 수 없습니다.");
// // age가 18보다 작은게 맞기에 if문을 통과해서 throw에 접근했음
// }
// System.out.println("프로그램 종료");
// 3. 언체크 예외 호출
ExceptionPractice exceptionPractice = new ExceptionPractice();
// try {
// exceptionPractice.callUnckeckedException();
// } catch (Exception e) {
// System.out.println("언체크 예외 처리");
// }
// 4. 체크 예외 호출
try {
exceptionPractice.callCheckedException();
}catch (Exception e) {
System.out.println("체크 예외 처리");
}
System.out.println("프로그램 종료");
}
}
'Today I Learned > 스파르타 내일배움캠프' 카테고리의 다른 글
[TIL] JAVA 컬렉션 프레임워크 (1) | 2025.03.10 |
---|---|
[TIL] 250305 계산기 과제 리뷰 (1) | 2025.03.05 |
[TIL] 250225 (1) | 2025.02.25 |
[TIL] 250224 (1) | 2025.02.24 |
[TIL] 내일배움캠프 250221 (0) | 2025.02.21 |