이제껏 코드작성하면서 나왔던 오류들을 따로 배우게 될줄 몰랐는데 ....
배우는 줄 알았으면 오류가 왜 났는지 빨간줄에 메세지도 주의깊게 볼 걸 그랬다.
NullPointException 정도 기억에 남아있다 ... 아니면 배열의 인덱스를 초과하는 오류(짜증)!!!
예외처리는 배우고 보니 핸들링 자동완성 기능이 있다는 게 정말 너무나 다행이었다.
try-catch구문 매번 쓴다고 생각하면 얼마나 귀찮았을까.
오류와 에러
시스템 상에서 프로그램에 심각한 문제가 발생해서
실행중인 프로그램이 영향을 받는 것은 오류와 예외로 구분할 수 있음
오류(Error) 시스템 상에서 프로그램에 심각한 문제를 발생하여 실행중인 프로그램이 종료되는 것
예외(Exception) 오류와 마찬가지로 비정상적으로 종료시키지만 미리 예측하고 처리할 수 있는 미약한 오류
예외 클래스 계층 구조
Exception과 Error 클래스 모두 Throwable클래스의 자손이다.
예외 클래스들의 최상위 클래스는 Exception 클래스이며
예외처리를 해야하는 Checked Exception과
해주지 않아도 되는 Unchecked Exception으로 나뉜다.
예외처리Exception
예외는 예외처리를 통해 코드의 흐름을 컨트롤 가능
예외 처리 방법
1. thorws로 위임
(Exception 처리를 호출한 메소드에게 위임)
메소드 선언 시 throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리를 위임
public static void main(String[] args) {
ThrowsTest tTest = new ThrowsTest();
try {
tTest.methodA();
} catch (IOException e) {
e.printStackTrace();
}
}
아래 메소드 A, B, C는 Throws로 예외 던지기하여
메소드 C Exception 발생하면 상위 메소드로 처리를 위임하고
try~cathch 안에서 처리된다.
public void methodA() throws
IOException {
methodB();
}
public void methodB() throws
IOException {
methodC();
}
public void methodC() throws
IOException {
throw new IOException();
//Exception 발생
}
2. try-catch로 처리
(Exception이 발생한 곳에서 직접 처리)
try : exception 발생할 가능성이 있는 코드를 안에 기술
catch : try 구문에서 exception 발생 시 해당하는 exceptio에 대한 처리 기술
여러 개의 exception처리가 가능하나 exception간의 상속 관계 고려
finally : exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술
중간에 return문을 만나도 finally구문은 실행되지만 System.exit();를 만나면 무조건 프로그램 종료
주로 java.io나 java.sql 패키지의 메소드 처리 시 이용
public void method() {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("C:/data/text.txt"));
String s;
while((s = br.readLine()) != null) {
System.out.println(s);
}
} catch(FileNotFoundException e) {
System.out.println("파일이 없습니다.");
} catch(IOException e) {
e.printStackTrace();
}
}
RuntimeException 후손 클래스
- ArithmeticException
0으로 나누는 경우 발생 if문으로 나누는 수가 0인지 검사 - NullPointerException
Null인 참조 변수로 객체 멤버 시도 시 발생 객체 사용 전에 참조 변수가 null인지 확인 - NegativeArraySizeException
배열 크기를 음수로 지정한 겨우 발생 배열 크기를 0보다 크게 지정 - ArrayIndexOutOfBoundsException
배열의 index범위를 넘어서 참조하는 경우 배열명.lengt를 사용하여 배열의 범위 확인 - Class CastException
Cast연산자 사용 시 타입 오류 instanceof연산자로 객체 타입 확인 후 cast연산
'백엔드 과정 > Java' 카테고리의 다른 글
[Java] day22. 입출력IO 보조스트림/ 직렬화 (0) | 2022.01.14 |
---|---|
[Java] day22. 입출력IO / Stream / File (0) | 2022.01.12 |
[Java] day20. 컬렉션 프레임워크 Set / Map (0) | 2022.01.12 |
[Java] day19. 컬렉션 자료구조 Stack/ Queue (0) | 2022.01.11 |
[Java] day19. 컬렉션 프레임워크 LinkedList (0) | 2022.01.11 |