본문 바로가기
JAVA

예외 선언하기

by 사브나19 2022. 8. 30.

예외 처리하는 3가지 방법 

 

1) Try-catch  : 직접 처리하기 

2) 예외 선언하기 ( 떠넘기기) : 문제가 생겼을 때 스스로 처리하지 않고 처음 주문 준 이에게 넘김 

3) 은폐 ( Try-catch 문을 쓰는데 빈 catch를 쓴다 이유는?  빅 데이터 다룰 때 그런 거 하나씩 다 신경 쓸 수 없어서)

 

 

예외를 발생하는 키워드는 throw이고 예외를 메서드에 선언할 때 쓰이는 ( 떠넘길 때 ) 메서드는 throws이다. 구별하기 

throws Exception의 경우 Exception은 모든 예외의 최고 조상이다. 그래서 모든 예외를 떠넘긴다는 뜻이다. 

잠깐! 오버라이딩 규칙 외워보자

1) 선언부 일치 2) 접근 제어자 좁게 안된다. 3) 조상보다 많은 예외 선언 안된다. 

그래서 조상을 받는 자손이 최고 조상을 예외 선언하는 건 안된다. 

try catch 블록을 만들고 마지막에 finally 블록을 만든다. finally 블록은 예외가 생기든 말든 꼭 필요한 블록이다.

만약 임시 파일들을 필히 삭제해야 하는 코드를 넣을 때 try catch 블록에 넣으면 중복 코드가 됨으로 이런 코드는 맨 마지막 finally 블록에 넣어 필히 실현시키도록 한다. 

 

사용자 정의 예외 만들 때 

1) Exception 이나 RuntimeException 중 하나를 상속받는다. ( 필수와 선택의 차이)

2) String을 매개변수를 받는 생성자를 생성 

 

예외 되던지기 란?

 

throw 예외가 발생되어 catch문으로 받았는데 다시 throw 다시 던짐 근데 위에 보면 throws임으로 떠넘기기 main으로 

연결된 예외라는 것은 예외를 발생시킨 예외를 포함하는 것 

알아야 할 클래스 Throwable이라는 것이 있는데 이는 Exception과 Error을 포함하고 있다. 그냥 Throwable은 Exception의 조상 정도로 생각하자. 

Throwable에는 casue라는 필드 iv가 있고 여기에 일단 객체 자신을 등록한다.

initCause(요 안에 예외를 발생하는 원인을 등록 ) 한다. 

initCause은 원인 예외를 등록할 때 쓰는 메서드

getCause은 원인 예외 반환할 때 쓰는 메서드 

 

위의 예제를 보자면

startInstall(); 이를 실행하면서 저장공간 부족으로 에러 발생 

catch 블록에서 이를 보완하는데 여기선 새로운 에러를 생성한다. 

InstallException이라는 큰 에러를 생성하고 그것의 참조 변수에 initCasue(예외)를 넣는다. 

그리고 이것을 다시 던져버린다. 

 

 

연결된 예외를 쓰는 경우 

1) 여러 예외를 하나로 묶을 때 예외가 너무 많은 면 각각의 catch 블록을 만들어야 한다. 그래서 이를 방지하기 위해 연결된 예외 사용

2) 체크드체크드 (Exception) 사용을 언체크드(RuntimeException)으로 바꿀 때. 체크 드는 필수로 Catch 블록을 만들어야 한다. 그래서 이를 언체크드로 바꿀 때   언체크용  예외를 만들어 그 안에 집어넣는다. 

 

'JAVA' 카테고리의 다른 글

JAVA 복습_ 객체지향  (0) 2022.09.06
JAVA 복습 3  (0) 2022.08.30
JAVA 복습 2  (0) 2022.08.29
예외 처리  (0) 2022.08.28
내부 클래스  (0) 2022.08.28

댓글