티스토리 뷰
Exception
Exception(예외처리)이란 오류가 발생했을 때 프로그램이 종료되는것을 막는 것이다. 예외처리는 Error와는 다르게 사용자(S/W)가 대처할 수 있다. 반드시 필요한 예외처리를 CheckedException이라 하고 프로그래머의 판단에 맡기는 예외처리를 UnCheckedException 이라고 한다.
예제
public class Exeption {
public static void main(String[] args) {
int r;
System.out.println("Exception Before");
try {
r = 10/0;
System.out.println(r);
}
catch(Exception e) {
e.printStackTrace();
String msg = e.getMessage();
System.out.println("msg : " + msg);
}
System.out.println("Exception After");//프로그램이 종료되지 않고 실행된다.
}
}
try catch문을 사용하지 않았다면, r을 0으로 나눈 순간 프로그램이 종료되어 콘솔창에는 Exception Before만 출력됐을 것이다. try영역에는 예외가 발생할 수 있는코드 (0으로 정수를 나눈다거나, 배열의 인덱스 초과, null 레퍼런스이용 등)를 기입하고 catch를 이용해 발생하는 오류를 처리하고 프로그램을 계속 실행해나간다. 단, try문 안에서 예외가 발생한 이후의 코드는 실행되지 않는다. ( println(r)은 실행되지 않았다. )
Finally
Exception에서 주의할 점은 try 에 존재하는 에러코드 이후의 명령어들은 실행되지 않는다는 것이다. 그렇게 되면 꼭 실행해야 할 명령어들이 실행되지 못하고 넘어가버리는 경우가 생길지도 모른다. 이 때 finally 를 이용하면 try문에서 문제가 발생하더라도 사용자가 실행하고싶은 명령어들을 실행할 수 있게된다.
예제
public class Finally{
public static void main(String[] args) {
int r;
System.out.println("Exception Before");
try {
r = 10/0;
System.out.println("출력되지 않습니다.");
}
catch(Exception e) {
e.printStackTrace();
String msg = e.getMessage();
System.out.println("msg : " + msg);
}
finally {
// System.out.println("finally : " + 1/0);
System.out.println("항상 실행됩니다.");
}
System.out.println("Exception After");
}
}
단, Finally내부에서 에러가 발생하면 즉시 종료됨을 주의하자.
finally {
System.out.println("finally : " + 1/0);
System.out.println("항상 실행됩니다.");
}
Throws
throws Exception 은 자기 자신을 호출한 메소드에게 오류처리를 넘겨주는 것이다. 예제는 first() -> second -> third() 순으로 호출을 하였고 third()메소드에서는 정수를 0으로 나누는 오류를 범하였다. 하지만 이 오류에 대한 예외처리는 third()메소드가 아닌 second()메소드에게 넘어가고 second 또한 throws Exceprion을 하였으니 first()메소드에게 까지 오류에 대한 예외처리를 넘기게 된다.
예제
public class Throws {
public static void main(String[] args) {
Throws lecture = new Throws();
try {
lecture.first();
} catch (Exception e) {
e.printStackTrace();
String msg = e.getMessage();
System.out.println("msg : " + msg);
}
}
public void first() throws Exception {
second();
}
public void second() throws Exception {
third();
}
public void third() throws Exception {
System.out.println(10 / 0);
}
}
정리
예외 처리에는 두가지가 있다는 것을 알아봤다. 하나는 try, catch, finally 또 하나는 throws이다. 예외처리를 사용하는것 자체는 난이도가 높지 않지만 프로그램을 하다가 발생하는 무수히 많은 예외에 대해 내가 직접 예외처리를 할 것인지 아니면 넘겨버릴 것인지를 그때마다 상황을 잘판단해서 사용하는 것이 중요하다.
'Programming > Java' 카테고리의 다른 글
인자(argument)와 매개변수(parameter) 차이, 인자 전달 과정 (0) | 2022.03.15 |
---|---|
[Java] JVM 메모리 구조 (0) | 2022.03.09 |
[Java] hashCode vs identityHashCode 차이점 (0) | 2021.08.05 |
[Java] String, StringBuffer, StringBuilder 차이점 (0) | 2021.08.05 |
Java 싱글톤 패턴 예제 (0) | 2021.07.09 |
- Total
- Today
- Yesterday
- CS
- svn
- 이클립스
- Java
- 부트스트랩
- 데이터베이스
- 오라클
- Open API
- 스프링
- Thymeleaf
- C++
- 백준
- 인턴
- CSS
- 개발용어
- 프로그래머스
- HeidiSQL
- 국비교육
- JSP
- JVM
- 네트워크
- 넥사크로
- 환경설정
- 스프링부트
- SQL
- 오류
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |