본문 바로가기
JAVA

[자바의 정석]Exception

by xunxou 2018. 9. 12.
이번에 보안컨설팅을 받게 되면서 exception 처리에 대한 지적사항이 많이 나왔다.
그래서  exception에 대한 내용을 알아보려고 한다.
 
 
 
Java exception
 
exception처리의 목적
오류가 발생했을때 처리 방법을 지정할 수 있다.
어플리케이션이 오류로 인해 실행할 수 없는 상황을 방지해준다.
 
 
 
 
상속관계(가장 위가 최상위 클래스)
Object
Throwable
Exception / error
........
 
 
위의 상속관계에서 보듯이 exception과 에러는 다르다.
 
error은 버그로, 꼭 해결하고 넘어가야하는 문제다.
 
 
 
Exception클래스 하위
IOException(입출력에러)
FileNotFoundException(지정한파일 못찾음)
.
.
RuntimeException
 
 
RuntimeException하위에는 NullpointException(null을 가지면 안되는애가 null값을 가짐)
ArrayOutOfBoundException(배열범위초과)등이 있다.
 
 
 
위의 상속관계를 참고하면
Exception하위 애들은
RuntimeExcepion과
RuntimeException이 아닌 애들로 나눌 수 있다.(보통 얘네들을 Exception이라고 부른다)
 
 
RuntimeException은 필수적으로 체크하지 않아도 되는 Exception이다.
보통 개발자의 실수로 일어나며 실행시에 발생하는 에러다.(널포인트 ,배열범위초과..)
 
필수체크가 아니므로 체크하지않아도 컴파일 시 컴파일러가 에러체크했는지 확인 안함. 
단, 컴파일에러가 안날뿐 실행시 오류날 수 있음.
 
 
Exception은 필수적으로 체크해야하는 exception이다.
파일을 찾을 수 없거나, 입출력에러,클래스를 못찾음 등 외부적인 요인에 의해 발생하므로 필수적으로 체크해줘야한다.
필수체크이므로 컴파일시 컴파일러가 체크했는지 확인. 
체크 안하면 컴파일에러 발생.
 
 
에러 발생 시 처리
try
     ..........
}
Catch(exception e)
{
     e.printStackTrace();
}
 
Catch문 안의 e.printStackTrace는 에러가 발생한 곳의 정보를 알려준다. 단 정보가 너무 자세하게 노출되므로 쓰지않는게 좋다.
Log를 사용할것.
Log level
Info / debug / error / fail ....
 
 
 
 
사용자정의 exception
내가 exception만드는것도 가능하다.
Public class customException extends Exception
{
Public customException()
{
         Super();
      }
}
 
이케 exception클래스를 상속받아서 개발자가 커스텀하는게 가능함.

 

 

 

요즘은 unchecked exception인 runtimeException을 상속받아서 유연하게 만드는게 대세
 
 
 
 
 
[출처] - 자바의 정석