예외 처리

2020. 4. 22. 15:45JAVA

예외 처리의 목적

- 예외가 발생하더라도 프로그램을 계속 실행하도록 하기 위해

- 예외가 발생했을 때 예외 내용을 기록하기 위해

 

예외처리 방법

1) 예외가 발생한 곳에서 처리

2) 예외를 호출한 곳으로 던져서 처리

 

규칙

- try가 나오면 catch나 finally 둘 중 하나는 반드시 나와야 함.

- catch클래스를 변경해서 여러개 작성 가능

- finally는 생략되거나 한번만 나와야 함.

- try구문 안에서 예외가 발생하지 않으면 catch구문은 수행되지 않고 finally로 넘아감.

- try구문에서 예외가 발생하면 예외와 일치하는 catch구문을 찾고 일치하는 곳이 있으면 처리하고

   finally로 넘어가고 일치하는 구문이 없으면 프로그램을 중단하거나 finally로 넘어감.

- try,catch,finally는 별도의 블럭이라 각가의 블럭에서 만든 변수는 타 블럭에서 사용 불가

 

주의할

- 여러 종류의 예외를 처리하고자 하는 경우에는 구체적인 예외 클래스 이름을 사용하지 않고

   Exception을 사용하면 됨.

- 상위 클래스 타입의 참조형 변수에 하위 클래스 타입의 인스턴스의 참조를 대입할 수 있음

- 대다수의 예외 처리 클래스는 Exception을 상속받았기 때문

 

예외의 강제 발생

- throw new 예외 클래스 이름(String msg);

- 예외가 아닌데 강제로 예외를 발생시켜서 출력하거나 프로그램을 중단 시킬 목적으로 사용

   Assertion 대신 이방식을 사용하는것을 권장.

 

예외를 호출한 곳으로 던지기

- 예외가 발생했을 때 메소드 안에서 처리하지 않고 메소드를 호출한 곳으로 전달을 해서 메소드를 호출한

   곳에서 처리하도록 하는 것

- 메소드이름(매개변수) throws 예외클래스 이름(메소드 내용)

  이 경우에는 메소드 내부에서 예외 클래스에 해당하는 예외가 발생하면 메소드를 호출한 곳에서 처리하도록

  하는 문장

- 자바에서 메소드를 호출할 때 예외처리를 강제시키는 경우 사용

 

파일 입출력, 네트워크 입출력, 데이터베이스 입출력을 할 때는 거의 대부분 예외처리를 강제함.

이런 경우 예외처리를 처음부터 하는 것이 좋고 다른 언어로 이 작업을 할 때도 예외처리를 해주는 것이 좋음.

 

사용자 정의 예외 클래스

- 사용자가 예외 클래스를 생성할 수 있음

- Exception 클래스를 상속받아서 만듦

- 강제로 예외를 발생시키고자 할 때 사용

 

try - resource 구문

- 자바가 생성하지 않은 리소스를 사용할 때는 리소스를 사용하고 반드시 close()를 호출해서 정리를 해야함.

 

try(리소스 생성){

        내용;

}

=> try 안에서 만든 resource는 try구문이 끝나면 자동으로 정리를 해줌.

 

java.lang

- 자바의 기본 패키지, import하지 않아도 한것으로 간주

- 이 패키지의 클래스는 이름 만으로 사용

 

Object클래스

- 자바의 최상위 클래스

- 자바의 모든 클래스는 이 클래스로부터 상속을 받음

- 이 클래스는 인스턴스를 직접 생성하지 않음.

- Object clone() => 인스턴스를 복제해주는 메소드, Cloneable이라는 인터페이스를 implements해서 clone메소드를 구현했다는 것을 알려줌.

   인스턴스를 = 를 이용해서 대입하면 인스턴스의 참조가 복사됨.

   인스턴스의 참조를 복사하게 되면 동일한 내용을 2개의 변수가 가리키는것

   하나의 변수가 세부 내용을 변경하면 다른 변수에게도 영향.

   인스턴스를 다른 변수에 대입할 때 인스턴스의 내용을 가지고 새로운 인스턴스를 만들어 그 인스턴스의 참조를 넘겨주는 경우가 있음.

   이 경우 자바에서는 clone이라는 메소드를 이용하는것을 권장.

 

- hashcode(): 숫자로 된 데이터를 리턴하는데 재정의해서 사용 가능한 메소드

- toString(): 인스턴스를 문자열로 표현해서 리턴하는 메소드 

                    재정의하지 않으면 클래스 이름과 해시코드를 하나로 묶어서 리턴

                    출력하는 메소드에 인스턴스 이름을 대입하면 이 메소드의 결과가 출력됨.

                    대다수의 언어에서 이런 메소드를 가지고 있음.

data인스턴스를 String으로 출력해줌

 

Data클래스에 toString구현(자동으로 해줌)

 

'JAVA' 카테고리의 다른 글

TreeSet  (0) 2020.04.28
String Builder  (0) 2020.04.24
내부 클래스  (0) 2020.04.21
Business Logic 구현 방법  (0) 2020.04.20
Abstract  (0) 2020.04.20