1. try / catch는 필수 2. try / catch를 잡아놓고 catch부분에 아무것도 작성하지 않는게 더 안좋음 3. throws를 통해 에러처리를 넘기는데 어디선가는 꼭 해야함 4. throws로 에러 책임을 넘기는게 무조건 나쁜건 아니고 상황에 맞게 사용해야함 5. Exception종류는 최대한 세세하게 선언해야함. 6. catch는 여러번 사용이 가능한데 상속 개념을 생각해서 사용해야함. (자바7부터) (위에 있는 catch의 Exception이 다음 catch보다 큰 개념이면 다음 catch까지 도달하지 못하기 때문) 7. 예외처리는 트랜젝션과 관계가 있다. 어디에서 예외처리를 하냐에 따라 롤백을 하느냐 마느냐를 정한다. 뭔가가 잘못되면 모든 작업을 중단해야하는데 예외처리를 잘못하면 뭐는 진행되고 뭐는 멈추고 해서 데이터가 뒤죽박죽 된다. |
예외처리
사용자의 실수든 환경의 오류든 코드가 제대로 실행되지 않는 경우가 있는데
예외처리를 하지 않으면 프로그램은 끝까지 실행되지 않고 중간에 멈춰버리게 된다.
그 에러 하나 때문에 프로그램이 멈추는 걸 방지하기 위해 예외처리를 한다.
예외처리를 하게 되면 프로그램이 돌다가 에러가나서 예외처리한 부분을 만나게 되면 개발자가 정해놓은 방법으로 넘어가서 프로그램이 멈추지 않게 된다.
예외가 일어날 것 같은 곳에 try, catch를 걸어준다.
try는 실행되어야 할 코드를 작성하고
catch에는 에러가 났을때 처리해야할 작업을 작성한다.
근데 catch부분에 예외에 대한 상황을 적어야 한다. 계산이 잘못된예외인지, 배열에서 벗어난 값을 찾는 예외인지
catch에 예외의 종류를 적고 보통 e를 적는다
사진처럼 e가 있는데 이걸 이용해서 오류 메세지를 확인할 수 있다
e.getMessage(), e.printStackTrace() 이런 명령어를 통해 오류의 메세지를 출력할 수 있다.
근데 이런 에러메세지는 위 사진처럼 바로 보이게 하면 보안? 관련에 문제가 생길 수 있기 때문에 로깅시스템 같은걸 이용해서 따로 에러를 모아둬야 한다.
(자세하게) e.printStackTrace() > e.getMessage() > e.toString() (간단하게)
순으로 에러에 대한 내용이 자세하게 나온다.
try / catch 는 마지막에 finally를 선택적으로 넣을 수 있다. (넣어도 되고 안넣어도 되고)
finally부분은 오류가 발생했든 안했든 반드시 실행되는 부분이다.
오류가 없을때 try부분과 finally부분이 실행 |
|
오류가 있을때 try, catch, finally 부분이 실행 |
예외 종류 https://jie0025.tistory.com/11 https://jdh5202.tistory.com/103 |
try/cathch와 throw의 차이
오류가 날것 같은곳에 개발자가 직접 try/catch를 잡아줘서 예외처리를 잡아줘야 하는데
오류를 처리하지않고 디바이드 메서드를 호출한 쪽에게 오류를 처리하라고 떠넘길 수 있는데 그 키워드가 throws다.
2번에 try/cathch를 사용해서 오류를 잡을 수 있지만
throws를 이용해서 2번에서 오류를 처리하지 않고 2번을 부르는 1번에 오류처리를 떠넘길 수 있다.
그리고 오류처리는 ,를 통해 여러개를 지정할 수 있다.
근데 1번 메소드에서 try/catch를 사용해야 한다.
에러는 어쩔 수 없는거
exception은 내가 잘하면 처리할 수 있는 것
exception은 Checked Exception과 UnChecked Exception으로 나눌 수 있다.
throw는 예외를 발생시키는것
throws는 예외를 던지는 것
throws는 메소드 선언부 끝에 작성한다.
method1에서 method2를 부른다.
그리고 method2에 throws를 작성했다.
저 코드상 method2에는 에러가 나야하는데 try/catch가 없는데도 빨간줄이 없다.
이유는 method2의 선언부에 throws를 작성했기 때문에 ClassNotFoundException이 발생한다면 method2를 부른 부분에서 처리하라는 의미가 된다.
그래서 method2를 부른 method1에서 예외를 처리해야한다. 그리고 그곳에 try/cathch가 있다.
throw는 메소드 내에서 상위 블럭으로 예외를 던지는 것
throws는 현재 메소드에서 상위 메소드로 예외를 던진다.
throw는 억지로 에러를 발생시킬때도 사용되지만 현재메소드의 에러를 처리한 후에 상위 메소드에 에러정보를 줌으로써 상위 메소드에서도 에러기 발생한것을 감지할 수 있다.
throw를 쓰는 이유? (내생각)
강제로 에러를 일으키는 throw를 왜 쓸까? 하는 생각을 하던중 아래 링크를 찾았다.
일정 로직에서 벗어나면 throw를 거쳐서 강제로 에러를 내게 할 수 있다.
개발자가 일정 규칙에 따라 코드를 만드는데 사용자가 다르게 사용하거나 수작을 부릴것 같다하면
조건문을 통해 일정 조건을 벗어나면 강제로 throw를 만나게해서
에러를 일으킬 수 있다.
https://okky.kr/article/703405
예외 처리시 Exception 말고 세세하게 하고싶은데 어떤 에러가 날지 모르겠으면 강제로 에러를 일으켜서 로그를 보고
나오는 에러를 써도 되겠지?
https://limkydev.tistory.com/198
https://coding-factory.tistory.com/280
https://catsbi.oopy.io/92cfa202-b357-4d47-8de2-b9b3968dfb2e
직접 예외처리
'개념정리' 카테고리의 다른 글
관점 지향 프로그래민(Aspect Oriented Programming , AOP) (0) | 2021.04.04 |
---|---|
트랜젝션 (0) | 2021.04.02 |
동기 비동기 (0) | 2021.03.30 |
비주얼스튜디오 (0) | 2021.03.30 |
자바 게시판 엑셀출력 (0) | 2021.03.30 |