Exceptions in Java

Haiseong Jeong·2022년 10월 19일
2
post-thumbnail

Exceptions

예외(Exceptions)란 잘못된 코드, 부정확한 데이터, 예외적인 상황에 의하여 발생하는 오류를 말한다. 0으로 나누는 것과 같은 잘못된 연산, 배열의 인덱스가 길이를 넘는 것 등의 에러가 발생할 수 있다. 자바의 메소드는 에러를 던지게 해서 try-catch 문법을 통해서 해당 메소드를 사용하도록 강제할 수 있다.

내가 쓸 메소드라면?

내가 쓸 코드라면 딱히 구현하지 않아도 될 문법이다. 왜냐하면 내가 메소드 인자를 잘 주면 오류가 발생할 일이 없기 때문이다. 하지만 내가 만드는 클래스를 다른 사람이 상속받아 사용하거나 팀단위로 협업을 하게된다면 문제가 생긴다. 사람들은 주석을 절대 안읽는다. 함수에 잘못된 인자를 주게되어 프로세스 전체가 종료되어 버리는 일이 생길 수도 있다. 종료되면 차라리 다행이다. 예상치 못한 치명적인 행동을 할 수도있다.

Exception의 종류

Checked Exception

  • 반드시 처리해야함 (처리가 강제됨)

Checked Exception은 강제로 try-catch 문법을 사용해야하는 Exception이다. try-catch를 쓰지 않으면 컴파일 되지 않는다.

Unchecked Exception

  • 반드시 처리할 필요는 없다 (처리가 강제되지 않음)
  • 매우 자주 일어나는 에러인 경우에 해당됨
  • 코딩의 편의를 위해 처리를 강제하지 않음

자주 쓰는 문법들도 예외가 발생할 일이 있다. 앞서 들은 예제인 나누기(/)가 대표적이다. 하지만 이런 예외들은 try-catch를 쓰지 않아도 괜찮다. / 연산을 할때마다 try-catch를 쓰면 얼마나 귀찮을까

사용법

try {
    ...
} catch(예외1) {
    ...
} catch(예외2) {
    ...
...
}

try에 오류가 발생할 여지가 있는 코드를 적는다. 만약 오류가 발생하면 catch구문으로 받는다. 여러가지 종류의 예외가 발생할 수 있으므로 catch를 여러개 쓸 수 있다.

메소드 안에서 예외를 처리하는 법

메소드를 만드는데 그 안에서 예외를 처리해야 한다면 두가지 방법이 있다.

  • 예외를 잡아서 그 자리에서 처리하는 방법: try-catch 블록을 사용하여서 예외를 잡고 처리한다.

  • 메소드가 예외를 발생시킨다고 기술하는 방법: throws를 사용하여, 다른 메소드한테 예외 처리를 맡긴다.

전자는 그 위치에서 에러를 처리한다. 발생한 오류에 따라서 적당한 처리를 해준다. 후자는 그 위치에서 에러를 처리하지 않는다. 이 메서드를 호출할 시점으로 에러를 넘긴다. 폭탄 돌리기 게임

예외처리의 장점

pseudo-code

파일을 열어 읽는 기능을 구현해보자

pseudo-code without Exception

pseudo-code Exception

결론

딱 봐도 후자가 간결하다. 코드 길이가 비슷하다 쳐도 문제가 있다. 처음의 if는 마지막의 else와 대응된다. 이렇게 코드가 짜여지면 가독성이 떨어지고 실수할 확률이 높아 오류처리가 힘들어 진다.

에러처리 문법을 사용하게되면 보기좋고 실수 없이 코드를 작성할 수 있다.

profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글