본문 바로가기
강의 실습/실무 자바 개발을 위한 OOP와 핵심 디자인 패턴

예외

by jint 2026. 1. 22.

1. Checked Exception vs Unchecked Exception
Q. Checked Exception과 Unchecked Exception은 무슨 차이인가요?
A. 자주 이야기하는 오답
Checked Exception은 컴파일 할 때 발생하고, Unchecked Exception은 런타임에 발생
틀린 이유 : 예외는 모두 런타임 시점에서만 발생 (컴파일 시점에는 예외 발생하지 않음)

컴파일 시점에는 문법이 맞지 않아 발생하는 컴파일 에러

A. 올바른 답변
Checked Exception은 컴파일 할 때 예외에 대한 처리를 강제하고, Unchecked Exception은 컴파일 할 때 예외에 대한 처리를 강제하지 않는다.

Checked Exception -> 예외 처리 강제 : try catch문 사용, throws로 메서드 바깥으로 예외 던짐
Unchecked Exception -> 예외 처리 강제 안함 : try catch문 없어도 됨, throws 없어도 컴파일 됨


2. Checked Exception
코드 설명)
Exception 클래스를 상속받음

메서드 바깥으로 throws 하면, 해당 메서드를 호출하는 부분을 try catch문으로 감싸야 한다.

CheckedExceptionExampleMain 클래스 main 메서드 실행시, client.tryCatchCheckedExceptionMethod() 메서드 try catch문에서 잡힌 CheckedException의 e.printStackTrace();가 찍힌다. 이 때 종료 코드는 0이다.
이 때 client.throwsCheckedExceptionMethod(); 메서드의 try catch문을 지우고, main 메서드 바깥으로 CheckedException을 throws 하면 동일하게 예외의 printStackTrace가 찍히는데, 종료 코드가 1로 찍힌다.
(프로세스 정상 종료 코드 : 0, 프로세스 비정상 종료시 0 이외의 다른값)

-> 예외를 Checked Exception으로 만들고 싶으면 Exception 클래스 상속 받기


3. Unchecked Exception
try catch문을 강제하지 않는 거지 못 쓰는게 아니므로, try catch문으로 예외 처리 가능

코드 설명)
RuntimeException 클래스를 상속받음

throws를 지우고 try catch문도 지우고 실행하면 컴파일이 잘 되고 main 메서드 바깥으로 던져진 printStackTrace가 찍힌다.

-> 예외를 Unchecked Exception으로 만들고 싶으면 RuntimeException 클래스 상속 받기


4. Checked Exception와 Unchecked Exception 분류
RuntimeException은 Checked Exception을 상속받지만, 문법적으로 Unchecked Exception으로 정의됨 : 암기

예외 : 코드상에서 발생할 것 예상하여 try catch문으로 해결 위한 로직 작성 (Checked)
오류 : 코드상에서 발생할 것 예상하기 힘듦. 오류 자체가 발생하지 않도록 해결하는게 적절. (힙 메모리 부족하여 발생하는 OutOfMemory 에러, 재귀함수에서 발생하는 StackOverflow 에러 등) (Unchecked)


5. Checked Exception과 Unchecked Exception 중 어떤 예외를 사용해야 할까?
예외 정의시, Unchecked Exception을 사용해야 한다.

이유 1) 대부분의 예외는 로직에서 해결 불가
ex) FileNotFoundException은 Checked Exception 이다.
try catch로 묶거나, 예외 처리할 방법도 없고 처리하기 귀찮으니 무의미한 throws를 메서드를 호출한 쪽으로 연속적으로 사용하게 된다.

-> 객체지향적 문제 : FileNotFoundException 예외를 던지는 것이 외부에 알려짐 : 캡슐화 깨짐
즉, 내부에서 FileNotFoundException 던질만한 메서드를 사용하고 있다는 사실이 던져지는 예외를 통해 알려짐


6. 결론
Checked Exception을 바깥으로 던지는게 캡슐화를 위반하는 코드가 될 수 있음
따라서, 캡슐화를 위반하지 않으면서 필요할 때만 예외를 처리할 수 있는 Unchecked Exception을 사용한다.

관련 내용 참고 링크 : https://stackoverflow.com/questions/6115896/understanding-checked-vs-unchecked-exceptions-in-java

 

Understanding checked vs unchecked exceptions in Java

Joshua Bloch in "Effective Java" said that Use checked exceptions for recoverable conditions and runtime exceptions for programming errors (Item 58 in 2nd edition) Let's see if I understan...

stackoverflow.com



참고링크 : https://school.programmers.co.kr/learn/courses/17778/17778-%EC%8B%A4%EB%AC%B4-%EC%9E%90%EB%B0%94-%EA%B0%9C%EB%B0%9C%EC%9D%84-%EC%9C%84%ED%95%9C-oop%EC%99%80-%ED%95%B5%EC%8B%AC-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4

 

실무 자바 개발을 위한 OOP와 핵심 디자인 패턴

@media (max-width: 991px) { .content { width: 100%; } } #landingPage { width: 100%; max-width: 848px; padding: 0 20px; letter-spacing: -0.02em; overflow-wrap: break-word; word-break: keep-all; word-wrap: break-word; } @media (max-width: 991px) {

school.programmers.co.kr

'강의 실습 > 실무 자바 개발을 위한 OOP와 핵심 디자인 패턴' 카테고리의 다른 글

Optional  (0) 2026.01.25
Object 클래스  (1) 2026.01.24
Enum  (0) 2026.01.21
추상 클래스와 인터페이스  (0) 2026.01.20
클래스와 상속  (1) 2026.01.19

댓글