2022. 9. 20. 02:04ㆍJava 프로그램
오늘은 예외처리(Exception)을 공부 해 보겠습니다. 사실 이 부분에서 벽을 느끼고 시간을 두고 공부했습니다.
그래도 열심히 해보면 될 것 같습니다.
우선 자바에서는 오류는 크게 2가지가 존재합니다.
1. 에러(Error)
- 정상 실행 상태로 돌아갈 수 없는 오류로 하드웨어의 동작 또는 고장으로 인한 오류 등등을 말합니다.
2. 예외(Exception)
- 사용자의 잘못된 조작 혹은 개발자의 잘못된 코딩으로 인한 오류입니다. 이 예외는 Error와 다르게 예외 처리를 수행해주는 코드를 추가하면 정상 실행 상태로 돌아갈 수 있습니다.
그렇다면 예외 종류는 무엇이 있을까요?
예외의 종류도 크게 2가지 정도가 있습니다.
1. 일반 예외
- 예외 처리 코드가 없으면 컴파일 오류가 발생합니다.
2. 실행 예외(runtime Exception)
- 예외 처리 코드를 생략하더라도 컴파일이 되긴 하는 예외 입니다.
이 실행 예외는 개발자의 경험에 따라 각각 다른 예외처리 코드 작성이 필요합니다.
예외에서 유독 어려웠던 것은 RuntimeException이었습니다. 지극히 개인적으로 이것이 어려웠지만 그렇기에 이 실행예외를 중점으로 다뤄 보겠습니다.
RuntimeException
1. NullPointerException
- null값을 갖는 참조변수로 객체 접근 연산자인 .(도트)를 사용했을때 발생합니다.
public class NullPointerException {
public static void main(String[] args) {
String data = null;
System.out.println(data.toString());
}
}
위 코드의 실행 결과는 NullPointerException이라고 콘솔창에서 뜨는 것을 확인 할 수 있습니다.
2. ArrayIndexOutOfBoundsException
- 배열에서 인덱스 범위를 초과하여 사용할 경우 발생합니다.
public class ArrayIndexOutOfBoundsException {
public static void main(String[] args) {
String[] data = new String[10];
System.out.println(data[11]);
}
}
위 코드처럼 data라는 String타입의 배열은 10크기 지만 정해진 인덱스를 벗어난 data[11]을 출력하려하니..
이렇게 ArrayIndexOutOfBoundsException의 예외가 발생했다고 알려주는걸 확인 할 수 있습니다.
3. ClassCastException
-타입 변환이 되지 않을 경우 발생합니다.
public class ClassCastException {
public static void main(String[] args) {
Animal animal = new Dog();
Cat cat = (Cat) animal;
}
}
위 코드처럼 타입 변환이 되지 않는다면 아래와 같이
ClassCastException 이 발생하는 것을 확인 할 수 있습니다.
이렇게 예외가 발생하면 예외처리 코드를 작성해야합니다.
예외처리 코드는 try~catch와 throws 가 일반적이라고 생각하시면 됩니다.
1. try~catch
실행 알고리즘(순서)는
try문 안에 예외가 발생할 우려가 있는 코드를 넣고 그 예외가 발생한다고 가정했을때의 처리할 코드를 catch문에 넣어 예외를 처리해주는 방법이라고 볼 수 있습니다.
ArrayIndexOutOfBoundsException를 예로 코드를 작성해 보겠습니다.
public class ArrayIndexOutOfBoundsException {
public static void main(String[] args) {
String[] data = new String[10];
try {
System.out.println(data[11]);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("인덱스를 초과하였습니다. 인덱스를 다시 조정해주세요");
}
}
}
이런 방식으로 try~catch문을 사용 한다면 예외처리가 발생했을때는 catch문에 있는 출력문이 실행되는 것을 확인할 수 있습니다.
2. throws
throws는 비교적 간단한 방법이라고 생각합니다. 사실 이건 자바가 알아서 처리해주는 느낌이 없지 않아 있기 때문인데요
일단 정의는
- 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠 넘기는 역할입니다. 즉, 메소드니 main메소드도 포함이겠죠?
알고리즘을 예로 들고 마무리 하겠습니다.
이런식으로 처리하지 않은 예외를 메소드를 호출한 곳에서 처리하게끔 넘겨주는 방식을 사용할 때 throws를 사용합니다.
예외처리와 예외는 코딩할 때 발생할 수 밖에 없는 당연한 과정이라고 생각합니다. 그렇기에 어떻게 보면 간단하지만 그렇다고 결코 가볍게 여길 문제는 아니라고 생각하기에 꼭 실습과 연습을 통해 익히는 것이 옳다고 감히 말씀 드려봅니다.
감사합니다.
'Java 프로그램' 카테고리의 다른 글
자바 기본 API 2편 (String Class~~ (2) | 2022.09.30 |
---|---|
자바 기본 API 1편 (0) | 2022.09.30 |
인터페이스(interface) (0) | 2022.08.30 |
클래스 상속- 다형성 (0) | 2022.08.30 |
상속 (클래스 상속)/ @Override (0) | 2022.08.30 |