우리가 자바를 공부하다가 잘못 소스를 치면 컴퓨터가 이해 못할 것으로 코딩을 하는 경우가 있다.
사용자(개발자)의 잘못된 조작이나 잘못된 코딩으로 인해 발생하는 프로그램 오류를 예외(exception) 이라고 한다.

이런 에러(error) 같은 실행 불능 상태로 종료 밖에 답이 없는 경우 말고 예외(Exception)은 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 유지할수 있다.
예외에는 두 종류가 있다.
일반 예외 (Exception), 그리고 실행 예외(Runtime Exceptime) 이 있다.
일반 예외는 자바가 컴파일 할 때 어느정도 잡히는 경우가 있지만 실행 예외 같은경우는 개발자의 잘못으로 이루어지는 경우가 많다.
1. NullPointException


위에 과정은 null인 String 타입을 toString을 써본 상황이다.
객체가 없는 상태에서 객체를 사용하려니 예외가 발생했다.
2. ArrayIndexOutOfBoundsException


이번 에러는 배열이 arr[1] 까지 있지만 [2]를 호출하도록 해봤다.
인덱스의 범위를 초과하여 나타나는 예외이다.
3.NumberFormatException


1aaa2 를 숫자로 바꾸고 싶은데 숫자로 바꿀수 없는 문자가 있어 에러가 났다.
앞에서는 많이 발생하는 에외 들을 보았습니다.
예외는 훨씬 더 많이 있지만 저걸 실수로 썼을때 그래도 진행을 시키고 싶을 때는 어떻게 해야 할까?
try ~ catch ~ finally 을 사용한다.

이런식으로 try 안에 문제가 발생할 것같은 문을 써주고 catch () 안에는 예외가 발생할 것같은 것을 써주면 그 예외가 발생이 되면 catch문 안에 실행문이 실행되고
finally 문은 예외가 발생하든 안하든 무조건 항상 실행이 되는곳이다.

만약에 두가지 에러가 생길일이 있으면 어떻게 할까?

하나는 nullpointerException 과 ArrayIndex 에러인데 NullPoint 에러가 먼저 발생하므로 첫번쨰 적어둔 catch 를 타고 finally로 가서 출력된다.

다양한 종류의 에러가 생길것같으면 저렇게 catch문을 적어준다.
하지만 어떤 에러가 발생할 것같은데 어떤 에러가 발생할지 모른다면 Exception 을 써준다.
그리고 catch에도 순서가 중요한데 모든 예외를 담는 Exception 이 처음 catch에 있으면 모든 예외에 해당하므로 첫번째만 지나게 된다. 하지만 catch 에서도 특정한 예외에 다른 실행문을 발생시켜주고 싶으면 Exception 을 밑에 catch 에 넣어야한다.


실습을 하면서 어떤 에러가 발생할지 잘 모르겠으면
에러를 강제적으로 발생시킬수 도 있다.

이렇게 throw new 에러이름 을 적어주면 에러가 강제로 발생한다.
대부분 예외처리는 try ~ catch 에서 하지만 한가지 방법이 더 있다.
바로 예외를 떠넘기는 throws 이다.

매개 변수 옆에 throws를 쓰고 예외 처리 될것같은 것을 입력할수 있고, 물론 다중 입력도 가능하다.

이렇게 예외를 호출한 곳으로 떠넘길것이다.
예외를 발생시킬때 예외메시지를 입력하여 나중에 볼 수 도 있다.


try ~ catch 에서 볼려면 Exceotion 객체의 getmessage() 메소드를 이용하여 볼수가 있다.


그리고 만약에 에러가 어디 서 일어났는지 try catch 문에서 볼려면
Exception 객체의 printStackTrace() 메소드로 예외의 대한 정보를 얻을 수 있다.


예외가 다른곳에 비해 중요하지 않다고 생각하는 사람이 많은데 실무에서 정말 많이 사용 되는 곳입니다. 꼭 한번 예외 처리 생각해 주시고 코딩해주셨으면 좋겠습니다~
'프로그래밍 > 자바(java)' 카테고리의 다른 글
[자바/java] System 클래스, Class 클래스 (0) | 2020.04.15 |
---|---|
[자바/java] Object 클래스, Objects 클래스 (0) | 2020.04.13 |
[자바/java] 중첩 클래스 / 익명 객체 (0) | 2020.04.11 |
[자바/java] 인터페이스(interface) (0) | 2020.04.11 |
[자바/java] 클래스(class) 접근제한자, 오버라이딩, 상속 (0) | 2020.04.11 |