애정코딩 💻

WEB/JAVA 2022.05.19 댓글 0 Joana

나만 어려운 예외처리

개발 하면서 당연한 부분이였지만 나에겐 새롭게 다가왔던 예외처리 ... ㅜ 

리뷰 해주시는 매니저님이 너무 잘 알려주셔서 정리 해봅니다 ( 격한 감사 🥹 )

 

 

소제목이 연관되어 이어지지는 않고 상황마다 예외처리 했던 부분을 메모했습니다.

 


예외 발생 시 조치를 못하는 경우 & 관리하지 못하는 경우

POINT

* 발생할만 곳 에서 catch 후 메시지를 적는다. (예외상황을 정확히 서술한다)
* 언체크예외로 변경한다.

 

예외를 잡지 못하면 자바에서는 해당 정보를 자동으로 출력합니다.

하지만 실패원인을 분석할 때 볼 수 있는 정보는 스택정보일 경우가 많기 때문에

log 로 예외를 관리하고 있다면 실패 원인에 관한 정보를 가능한 많이 담아 반환하여 

추적하기 쉽도록 하는게 중요합니다!

 

1. 발생한 예외에 대한 모든 값을 실패 메시지에 담는다.

- 단순히 catch 후 throw 시키는 것은 예외블랙홀에 빠질 수 있다.

 

주의! ) 실제 사용자에게 보여줄 오류 메시지와 함께 사용하면 안된다.

사용자에게는 간단하고 명료하게 어떤 오류가 났는지 설명하고

예외 메시지는 가독성보다는 어떤 에러가 발생했는지에 대한 내용을 중요시 해야한다.

 

2. 실제 로직 과 예외처리 부분이 나뉘어져 필요한 부분에 집중할 수 있도록 한다.

 

3. 언체크 예외 

 RuntimeException 을 상속한 예외들은 따로 언체크 예외라고 한다(런타임 예외라고도 함) 

언체크 예외는 따로 catch 문으로 잡거나, thrwos 하지 않아도 된다.

 

보통 입출력 관련 클래스들은 항상 Exception 처리를 해주어야 한다.

입출력이지만 없으면 실행시키지 않아도 되는 부분 은 무시하고 계속 동작하게 두어야 하기 때문에 RuntimeException 이 있는것 같다. 언체크 예외는 로직에 따라 충분히 고민 후 사용해야 한다.

 

* 언체크지만 어떤 에러가 발생했는지에 대한 내용은 필수로 작성하기

 

예외 관리하기

POINT

예외 복구, 예외 전환 , 예외 회피

Try with resource

- try 코드 블록이 끝날때 자원을 종료시켜준다. 즉, finally 이ㅣ나 catch 블록에 종료 처리를 하지 않아도 된다.

try (SomeResource resource = getResource()) {
    use(resource);
} catch(...) {
    ...
}

위와 같이 사용하는데 try 에 전달되는 자원은 AutoCloseable 인터페이스의 구현체로 한정된다.

(자원을 자동으로 종료 시켜주는 구현체가 제한 되어있다.)

 

예외 회피

- 해당 로직이 아닌 호출하는 부분에서 Handling 하도록 한다.

private void getUserInfo() throws XXXException{
}

위와 같은 코드가 Exception 발생시 throws를 통해 호출 된 부분으로 해당 예외를 던져버리면서 예외처리를 회피하는 방식이다.

* 호출 부분에서 예외를 처리하는게 맞을 경우에 사용해야 한다.

* 해당로직에서 처리하지 않고 회피하려는 목적, 확신이 있어야만 사용해야 한다.

반응형