1. Exception이란?
exception이란 jabva.lang.Exception클래스 및 Exception클래스의 서브클래스들을 지칭합니다.
여기서 checked exception과 unchecked exception으로 나뉘어 집니다.
2. Exception 종류
2-1. Unchecked Exception
RuntimeException을 상속한 서브클래스들이다. 명시적으로 예외처리를 강제하지 않습니다.
프로그램에 오류가 있을때 발생하도록 의도되었습니다.
2-2. Checked Exception
Check exceptuon(RuntimeException)을 제외한 나머지 exception들입니다.
복구 가능한 예외로 판단하며, throw로 처리를 위임하거나 catch문으로 예외처리를 해야합니다.
예외처리를 하지 않는다면 컴파일 에러가 발생합니다.
2. 예외처리 방법
2-1. 예외 복구
try-catch구문을 사용해 예외가 발생해도 로직은 정상적으로 실행이 되게 하도록 처리하는 것입니다.
예를들어 사용자의 주소를 받아 ‘-’로 구분해 주소를 4토막으로 나눠 반환하는 로직이 있다고 합시다.
try{
UserDto userDto = userService.select(data);
String addr = userDto.getAddr();
return addr.split('-');
} catch (Exception e){
String[] emptyAddr = new String[4];
Arrays.fill(emptyAddr, "");
return emptyAddr;
}
만약 UserDto가 비었다면 split시에 NPE가 발생할 것입니다.
NPE발생시 catch부분에서 빈 스트링 배열을 반환해 로직이 정상적으로 처리해 예외 복구를 했습니다.
만약 addr이 not null속성이였다면, db io중에 데이터손실이 발생한 것으로 판단,
정상적인 값이 올때까지 재시도를 하는 등의 방법도 있겠습니다.
2-2. 예외처리 회피
자신에게 예외가 발생한다면, 직접 처리하지 않고 호출한 메서드에게 위임합니다.
예외를 발생시키는 getUserSplitedAddr메서드는 예외처리에 전혀 관여하지 않고,
userDetailInfo에 예외처리를 위임해 예외처리를 회피한 코드입니다.
public void userDetailInfo(){
String[] userAddr
//...etc properties
//...
try{
userAddr = getUserSplitedAddr()
} catch (Exception e){
userAddr = new String[4];
Arrays.fill(emptyAddr, "");
}
//...
}
public String[] getUserSplitedAddr() throws Exception{
UserDto userDto = userService.select(data);
String addr = userDto.getAddr();
return addr.split('-');
}
2-3. 예외 전환
발생한 예외를 다른 예외로 변경하는것입니다.
호출한 메서드가 일일히 선언하지 않아도 되도록 사용하거나 좀더 명확하게 인지할수 있도록 할떄 사용합니다.
unchecked exception은 예외발생시 명시적인 처리 없이도 컴파일에러가 나지 않습니다.
이미 빈 스트링 배열로 userAddr을 초기화 하였는데, getUserSplitedAddr가 예외가 난다면 그냥 흘려 보내도 되니까요!
public void userDetailInfo(){
String[] userAddr = new String[4]
Arrays.fill(userAddr , "");
//...etc properties
//...
userAddr = getUserSplitedAddr(userAddr);
//...
}
public String[] getUserSplitedAddr(String[] userAddr) {
try{
UserDto userDto = userService.select(data);
return userDto.getAddr().split('-');
} catch (Exception e){
throw new RuntimeException();
}
}
'Language > JAVA' 카테고리의 다른 글
Int와 Integer의 차이 (0) | 2022.09.29 |
---|---|
JavaScript)문자열 자르기 - substring, slice() [짧] (0) | 2022.09.08 |
JavaBean이란? + 자바빈 규약 (0) | 2022.04.16 |
Oracle JDK Archive Link (0) | 2021.12.01 |
RxJAVA - CompositeDisposable 간단 정리 (0) | 2021.10.17 |