ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java Exception
    개발언어/Java 2020. 3. 16. 01:10

    1. 개발자가 마주하는 Error 종류

    Java의 Error에는 컴파일에러, 런타임에러, 논리적에러가 존재한다. 

    컴파일에러는 말 그대로 컴파일 과정에서 발생하는 에러이고, 런타임에러는 프로그램이 Run 중일때(Run-time) 발생하는 에러이다. 또한, 논리적 에러는 실제 정상적으로 코드가 잘 돌아가고 있지만, 개발자가 논리적으로 의도한 것과 다르게 동작하는 것을 의미한다.

     

    2. Java의 Exception

    우리는 여기서 분명하게 구분해야할 것이 있다. 바로 Error와 Exception이다. 우리는 보통 Exception을 예외처리라는 것으로 처리한다. 여기서 예외처리에서 예외(Exception)이라는 말은, 개발자가 예상 가능한 에러를 의미한다. 그리고 그 예상 가능한 것을 발생하지 않도록 처리하는 것이 예외처리다. 에러는 이와 반대로 예상가능하지 않은 영역의 문제다. 말 그대로, 예외적으로 발생할거라고 생각하지 못한 문제라고 생각하면 된다.

     

    3. Exception의 종류

    Exception에도 종류가 있는데, 그건 바로 일반 예외와 실행 예외다. 일반 예외는 자바 소스를 컴파일하는 과정에서 예외처리가 필요한지 검사하고, 예외처리 코드가 없다면 컴파일 오류가 발생한다. 실행 예외는 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외를 말한다. 

     

    위의 말을 Java에 대입하여 좀 더 구체적으로 말하면, 일반예외는 Exception을 상속받지만 RuntimeException을 상속받지 않는 클래스이다. 실행예외는 반대로 Runtime Exception을 상속받는 것을 말한다. (그림을 참고하면 좀 더 쉽게 이해가 될지도?) 어쨌든, JVM은 RuntimeException을 상속했는지 안했는지를 판단하여 실행 예외를 판단한다.

     

    Exception 상속 구조

    4. Runtime-Exception

     실행 예외가 발생하는 경우 프로그램이 비정상종료된다. 이것은 컴파일러가 해당 예외를 체크하지 않기 때문인데, 아쉽게도 이 부분은 개발자가 경험에 의해 예외처리할 수 밖에 없다. 

     

    5. 대표적인 실행예외 종류

    1) NullPointerException(흔히 NPE가 발생한다고 많이 말한다. 초보 개발자들은 알아두자)

     말 그대로 객체에 값이 없는 상태. 특정 변수에 데이터가 들어오지 않아서 값이 없는데, 해당 변수에서 값을 가져오려고 시도하는 경우에 발생하는 에러.

     

    2) OutOfMemoryExcpeption(흔히 OOM이라고 말함)

     더 이상 사용가능한 메모리가 없는 경우에 발생하는 에러.

     

    3) IllegalArgumentException

     메소드의 전달 인자값이 잘못된 경우에 발생한다. (이것도 개발중에 은근히 많이 발생함)

     

    4) ArrayIndexOutOfBoundsException

     배열에서 인덱스 범위를 초과하여 사용할 경우에 발생하는 에러

     

    5) NumberFormatException

     숫자 형태 Exception(?). 즉, int a 에 "1"을 넣은 경우를 생각하면 된다. 즉, 변수는 숫자값을 기대하고 있는데, 문자열이 입력된다거나 다른 타입의 값이 들어오는 경우에 발생한다.

     

    6) ArithmeticException

     산술연산 Exception. 즉, 어떤 숫자를 0으로 나누는 경우에 주로 발생한다. (또는 말도 안되는 수식이 입력되는 경우에 발생한다)

    '개발언어 > Java' 카테고리의 다른 글

    예외 처리  (0) 2020.03.15
    [Java 기초] Stream - 1  (0) 2019.05.26
    [Java 기초] 멀티 스레드 - 1  (2) 2019.05.13
    [번역] Java 8의 동시성(Concurrency)  (0) 2019.05.01
Designed by Tistory.