이번에 보안컨설팅을 받게 되면서 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을 상속받아서 유연하게 만드는게 대세
[출처] - 자바의 정석
'JAVA' 카테고리의 다른 글
[자바의 정석]클래스와 객체 (0) | 2018.09.12 |
---|---|
[자바의 정석]직렬화 (0) | 2018.09.11 |
[자바의 정석] 클래스 메소드(static 메소드)와 인스턴스 메소드 (0) | 2018.09.10 |