ㅇTL

Chap 9. Exception handling 본문

2-1/객체지향 - java

Chap 9. Exception handling

정노르레기 2022. 5. 30. 22:33

Exception = 프로그램의 정상적인 수행 도중에 발생할 수 있는 오류 !

이거 발생 -> 프로그램 종료 (exception 발생 - 프로그램이 이 exception catch를 실패하면 충돌이 일어나서 프로그램 종료! )

이거 handling -> 프로그램 종료되지 않고 실행이 유지되도록 할 수 ㅇ

 

 

handling 방안

1. try-catch 문

try{
	//예외가 발생할 것 같은 코드
    //exception이 발생하면 try안의 남은 코드들은 건너뛰어짐
}
catch(Exception e){
	//예외가 발생할 경우 어떻게 할 것인지  
}
finally{
	//항상 실행되는 부분
}

예외 발생되는 말든 결국 이부분 실행 후에는 try-catch블록 이후의 코드들을 실행한다~~^^

-여러개의 catch 블럭 가능 -> 더 구체적인 예외 먼저 해야함!

 

예외 던지기

• try 블럭 내에서 직접적으로 throw 가능 

**throw 는 method가 아니라 operator이다! +, -처럼!

• method 내에서 throw 가능 -> 결국 어디서든 try-catch 를 통해 핸들링 되어야함!

( 이런식으로 함수 이름 뒤에 throws 예외이름 해줘야함 )

 

Exception class

- 자바 내에 다양한 Exception class 존재 -> 사용하려면 import 해야함! (그냥 Exception은 java.lang에 존재)

- 직접 define도 가능

 

• exception객체에서 중요한 것 : exception의 type(어떤 클래스타입인지) / 가지고 있는 message

 

• Exception은 무조건 string을 전달하는 constructor을 가짐 (=message)

-> getMessege() 함수로 해당 메세지 불러올 수 있당~~ (accessor 메소드) 무조건 getMessage 함수 존재.

     (예외 오면 catch블럭에서 이 함수를 불러옴으로써 이 message 이용 가능)

• Exception은 무조건 예외 발생 이유를 식별하는 message를 포함한 String instance variable을 가지고 있다. 이를 getMessage가 반환 (?)

 

(throw할때는 발생이유를 간단히 String으로 적어서 new로 호출하는거고, 저절로 예외 생길땐 알아서 적혀서 던져지는듯?)

 

Programmer-defined Exceptions

* 이미 존재하는 Exception class로부터 파생되어야 한다 (당연)

( 그냥 Exception 을 상속해도 오키. 당연~ )

* 최소 두개 이상의 생성자 정의되어야 함 

- 기본 생성자 ; super(스트링) 이렇게 함

- 스트링을 받는 생성자 ; super (해당 스트링) 이렇게 함

* getMessage()를 상속받음

* 다른 타입을 인자로 받는 생성자 정의 가능 -> 그러면 instance variable이랑 거기에 접근할 수 있는 겟 메세지같은 accessor 메소드를 정의해야함!

 

Catch or Declare Rule

일반적으로, method 내부에서 throw된 대부분의 exception들은 아래와 같은 방법으로 throw 된 것이다.

 

1. 그 method 에 catch block이 있고 거기서 exception handling이 가능한 경우

2. method heading에 그 exception이 declare 되어 있는 경우. ( = throws clause를 사용한 경우)

(만약 method가 2. 를 따르고 실제로 exception throwing이 발생한 경우에는

그 method의 실행이 바로 중단되고 적절한 catch block으로 실행의 흐름이 넘어간다.)

 

꼭 이렇게 두가지 !!

 

 

'2-1 > 객체지향 - java' 카테고리의 다른 글

Interfaces and Inner Classes  (0) 2022.06.02
19- Threads  (0) 2022.05.31
Polymorphism and abstract classes  (0) 2022.04.20
Chap 7. Inheritance (상속)  (0) 2022.04.12
Chap 6. Arrays ..  (0) 2022.04.06