2020. 4. 22. 15:45ㆍJAVA
예외 처리의 목적
- 예외가 발생하더라도 프로그램을 계속 실행하도록 하기 위해
- 예외가 발생했을 때 예외 내용을 기록하기 위해
예외처리 방법
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(): 인스턴스를 문자열로 표현해서 리턴하는 메소드
재정의하지 않으면 클래스 이름과 해시코드를 하나로 묶어서 리턴
출력하는 메소드에 인스턴스 이름을 대입하면 이 메소드의 결과가 출력됨.
대다수의 언어에서 이런 메소드를 가지고 있음.
'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 |