-
자바의 예외(Exception)란 무엇일까?Java 2018. 7. 26. 12:40반응형
코딩을 하다보면 항상 만나는 ~~~.Exception ,,,,
볼때마다 답답하고,, 숨이 막히는데요
이번에 Exception에 대해 알아보겠습니다.
* 노란 박스 - Checked Exception
* 파란 박스 - Unecked Exception
0. Exception vs Error
1) 에러(Error)
- 시스템에서 비정상적인 상황이 생겼을 때 발생한다.
- 시스템 레벨에서 발생하기 때문에 개발자가 미리 예측하여 처리할 수 없는 심각한 오류입니다.
2) 예외(Exception)
- 개발자가 구현한 코드에서 발생하기 때문에 미리 예측하고 코드에 의해 수습될 수 있는 오류입니다.
3) Checked Exception vs Unchecked Exception
- Checked 와 Uncheked의 가장 큰 차이는 명시적으로 예외를 처리하는지 안하는지의 차이를 가집니다.
① Checked Exception : RuntimeException 클래스에 상속하지 않은 것들이고, 예외가 발생할 수 있는 메소드를 사용할 경우
반드시 catch문이나 throw를 정의해서 처리해야 합니다.
② Unchecked Exception : 프로그램이 실행된 후에 확인할 수 있고, 프로그램의 오류가 있을 때 발생하도록 의도된 것입니다.
1. 예외 (Exception) 란?
- 자바 프로그램 실행 시 발생할 수 있는 예외를 말합니다.
- JVM이 프로그램 실행시 Exception 상황을 만나면 해당 Exception을 발생시키고 프로그램을 즉시 종료합니다.
2. 예외처리 (Exception Handling) 란?
- JVM이 Exception을 발생시켜 전달할 때 적절한 Try와 Catch 구문으로
해당 Exception에 대한 적절한 대처 방안을 실행하고 프로그램을 정상적으로 지속시키기 위한 작업을 말합니다.
3. try, catch, finally, throw, throws 키워드
1) try : Exception 발생 예상 코드 영역을 지정합니다.
2) catch : Exception 처리, Exception에 대한 대처 방안을 실행합니다.
2-1) printStackTrace()와 getMessage()란?
① printStackTrace() : 예외 발생 시의 호출스택에 있었던 메소드의 정보와 예외 메시지를 출력합니다.
② getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있습니다.
3) finally : finally 영역은 Exception 발생 및 처리여부와 관계없이 항상 실행합니다.
4) throw : new 연산자를 이용해 고의로 Exception 을 발생시킨다.
5) throws : 예외가 발생한 지점에 try문으로 처리하지 않아도, 호출한 영역(곳)으로 Exception을 발생하면 던질 수 있다는 의미입니다.
4. 예외 처리 예제
1) 예제1 ( try - catch 문 )
▶ 아래 예제에서 ArrayList에 add메소드를 통해 "사과"와 "배"를 추가하였지만 list.get(2)를 통해 가지고 있는 범위를 초과하려고 합니다.
그렇기 때문에 ① try문 내에서 IndexOutOfBoundsException이 발생합니다. 하지만 ②의 발생한 예외와 일치하는 catch문을 확인합니다.
③에서 일치하는 catch문을 찾은 뒤 해당하는 catch문 내의 명령을 실행하고 ④try - catch문을 빠져나갑니다.
결과화면을 보면 프로그램이 정상적으로 수행됨을 알 수 있습니다.
123456789101112131415161718192021import java.util.ArrayList;public class TestException {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>();list.add("사과");list.add("배");// 하나의 try 블럭에 대한 catch는 여러개 정의 가능합니다.// 구체적인 예외(자식) -> 추상적 예외(부모) 순으로 명시해야 합니다.① try {System.out.println(list.get(2));} ② catch(IndexOutOfBoundsException ie) {③ System.out.println("리스트 요소 범위를 초과하였습니다.");} catch (Exception e) {e.printStackTrace();}④ System.out.println("프로그램이 정상 실행하였습니다.");}}cs ※ 결과화면
2) 예제2 ( 사용자 정의 예외, throw, throws 사용 )
▶ 아래 예제에서 사용자 정의로 예외를 만들었습니다. Exception 클래스에서 상속을 받고 예외 처리시 보여줄 message를 설정해줍니다.
serialVersionUID란 static final 상수는 general serial version 이라는 애인데요. 이 아이에 대한 설명은 다음으로 미루겠습니다. ^^;;
InvalidAgeExeption() 은 기본 메세지를 보여주기 위한 의도이고, InvalidAgeException(String message)는 상세하게 보여주기 위한 의도입니다.
super() 대신 System.out.println으로 콘솔창에 잘못된 정보를 보여줄 수 있지 않나라고 생각하실 수 있지만, 웹같은 경우를 예로 들면
예외에 대한 내용을 보통 팝업창으로 띄어 사용자에게 보여주지만, System.out.println은 팝업창에 메세지를 띄어서 보여줄 수 없는 차이가 있습니다.
12345678910public class InvalidAgeException extends Exception {private static final long seralVersionUID = 4606001480844065202L;public InvalidAgeException() {super("잘못된 나이 정보입니다.");}public InvalidAgeException(String message) {super(message);}}cs ▶ 아래 예제에서 ① Peroson 객체에 올바르지 않은 나이 정보를 넘깁니다. 올바르지 않은 나이로 인해 예외가 발생할 것을 예상해서
② InvalidAgeException을 throw하여 예외를 발생시킵니다. ③ 또한 throws을 명시해서 예외가 발생 시 호출하는 곳으로 전달시킵니다.
호출한 곳에서 예외가 발생하였기 때문에 ④catch문안에 InvalidAgeException 클래스에서 검사하고 예외처리합니다.
12345678910111213141516171819202122232425262728293031/** throws : 메서드 선언부 마지막에 명시하고 해당 메서드 실행 시 발생되는 예외를 호출한 곳으로 던질 수 있다는 의미의 키워드* throw : 특정 조건이 충족될 경우 예외를 발생시킨다.*/class Person{private int age;// throws 를 명시해서 예외 발생시 호출한 곳으로 전달public void setAge(int age) ③ throws InvalidAgeException {if(age>0)this.age=age;else //잘못된 나이이므로 InvalidAgeException 발생② throw new InvalidAgeException(age+" 나이 정보가 아닙니다.");}public int getAge() {return age;}}public class TestException2 {public static void main(String[] args) {Person p=new Person();try {① p.setAge(-1);System.out.println("나이:"+p.getAge());} ④ catch (InvalidAgeException e) {//e.printStackTrace();System.out.println(e.getMessage());}}}cs ※ 결과화면
반응형'Java' 카테고리의 다른 글
JDBC란 무엇일까? (0) 2018.08.01 Java SE 환경설정하는 방법 (0) 2018.07.29 객체의 관계들은 어떤것이 있을까? (0) 2018.07.25 static, final, abstract 무엇일까? (0) 2018.07.19 객체 지향3. 다형성(Polymorphism)이란 무엇일까? (0) 2018.07.17