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 |
Tags
- DDD
- 자료구조
- aop
- 자바
- 인프런김영한
- 네트워크
- MariaDB
- CleanCode
- react
- java
- SQL쿡북
- 이펙티브자바
- 클린코드
- 알고리즘
- 알고리즘분석
- jpa
- mysql
- 인프런백기선
- 자바예외
- 도메인 주도 개발 시작하기
- vue.js
- 인덱스
- 이펙티브 자바
- 이팩티브 자바
- AWS
- AWS RDS
- 자바스터디
- 혼공SQL
- 기술면접
- 스프링부트와AWS로혼자구현하는웹서비스
Archives
- Today
- Total
기록이 힘이다.
왜 우리는 비검사 예외를 선호하는가?(UncheckedException) 본문
728x90
-컴파일 에러를 신경쓰지 않아도 되며,
-try-catch로 감싸거나
-메서드 선언부에 선언하지 않아도 된다.
-그렇다면 우리는 비검사 예외만 쓰면 되는걸까? 검사 예외는 왜 있는 것일까?
UncheckedException 예제
public class MyApp{
public void hello(){
System.out.println("hello");
throw new MyException();
}
public static void main(String[] args){
MyApp myApp = new MyApp();
myApp.hello();
}
}
편리하다는 것을 이유로 사용하면 안된다.
왜 잡지 않은 예외를 메서드에 선언해야 하는가?
-메서드에 선언한 예외는 프로그래밍 인터페이스의 일부다. 즉, 해당 메서드를 사용하는 코드가 반드시 알아야 하는 정보다. 그래야 해당 예외가 발생했을 상황에 대처하는 코드를 작성할 수 있을테니까.
비검사 예외는 그럼 왜 메서드에 선언하지 않아도 되는가?
-비검사 예외는 어떤 식으로든 처리하거나 복구할 수 없는 경우에 사용하는 예외다. 가령, 숫자를 0으로 나누거나, null 레퍼런스에 메서드를 호출하는 등.
-이런 예외는 프로그램 전반에 걸쳐 어디서든 발생할 수 있기 때문에 이 모든 비검사 예외를 메서드에 선언하도록 강제한다면 프로그램의 명확도가 떨어진다.
Checked Exception 예제
public class MyApp{
/*
*@param name
*@throws MyException
*/
public void hello(String name) throws MyException{
if(name.equals("푸틴")){
throw new MyException();
}
System.out.println("hello");
}
public static void main(String[] args) throws MyException{ --> exception 확인
MyApp myApp = new MyApp();
try{
myApp.hello();
}catch(MyException e){
myApp.hello("기선");
}
}
}
가이드 라인: 클라이언트가 해당 예외 상황을 복구할 수 있다면 검사 예외를 사용하고, 해당 예외가 발생했을 때 아무것도 할 수 없다면, 비검사 예외로 만든다.
'JAVA' 카테고리의 다른 글
[이펙티브 자바] 58. 전통적인 for문보다는 for-each문을 사용하라 (0) | 2023.04.20 |
---|---|
[이펙티브 자바] 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라 (0) | 2023.04.19 |
[이펙티브 자바]아이템 57 지역변수의 범위를 최소화하라 (0) | 2023.04.11 |
[이펙티브 자바]아이템55. 옵셔널 반환은 신중히 하라 (0) | 2023.04.10 |
[이펙티브 자바] 아이템45 스트림은 주의해서 사용하라 (0) | 2023.04.07 |