Java - exception

청포도봉봉이·2023년 12월 15일
1

java

목록 보기
6/20
post-thumbnail

Exception은 자바에서 어떤 역할을 하는지, 그리고 어떤 상황에서 사용되는지에 대해 설명해주세요.

오류와 예외의 차이


오류(Error)예외(Exception) 둘 다 프로그램 실행 중에 발생할 수 있는 문제지만, 그들 사이에는 중요한 차이점이 있다.

오류


오류(Error)는 시스템 레벨에서 발생하는 심각한 문제를 나타내며, 대체로 프로그래머가 제어할 수 없는 부분이다. 예를 들어, JVM에서 발생하는 시스템 오류나 메모리 부족 등이 있다. 이런 오류는 발생하면 보통 프로그램이 종료되니, 이를 처리하려면 오류가 발생하지 않도록 사전에 대비하는 것이 중요하다.

오류의 종류

VirtualMachineError : 이 오류는 JVM이 자체적인 문제를 만났을 때 발생한다. 이 오류에는 OutOfMemoryError(가용 메모리 부족)와 StackOverflowError(재귀 호출 등으로 스택 메모리 부족) 등이 있다.

IOError : 이 오류는 I/O 작업 중에 발생하는 시스템 오류를 나타내며, 이 오류에는 DiskNotWritableError(디스크 쓰기 불가), DiskFullError(디스크 공간 부족) 등이 포함된다.

예외


반면에 예외(Exception)는 프로그램 실행 중 발생할 수 있는 예상 가능한 문제를 의미한다.
또한 사용자의 잘못된 조작이나 개발자의 코딩 실수로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생하면 프로그램이 종료된다는 점에서 에러와 동일하나, 예외는 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태를 유지할 수 있게 할 수 있다.

예외의 종류


Checked Exception: 이런 예외는 컴파일 시점에 체크되는 예외로, 프로그래머가 반드시 처리해야 한다. 처리하지 않으면 컴파일 에러가 발생하게 된다. 예를 들어, 파일을 읽을 때 해당 파일이 없는 경우나 네트워크 연결 중에 연결이 끊기는 경우 등이 있다.

Unchecked Exception: 이런 예외는 실행 시점(Runtime)에 발생하는 예외로, 프로그래머가 반드시 처리하지 않아도 되지만, 처리하지 않으면 프로그램이 비정상 종료되게 돼. 예를 들어, null 참조나 배열의 범위를 벗어나는 경우 등이 있다.

자바에서의 Exception(예외)란 사용자의 잘못된 조작이나 개발자의 코딩 실수로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생하면 프로그램이 종료된다는 점에서 에러와 동일하나, 예외는 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태를 유지할 수 있게 할 수 있다.

Java에서의 예외 처리 방법

예외 복구(Exception Recovery)


예외 복구(Exception Recovery)라는 것은, 예외가 발생했을 때 적절한 대응을 통해 프로그램의 실행을 계속할 수 있도록 하는 것을 말한다. 예를 들어, 파일을 읽는 과정에서 문제가 발생했을 때 재시도하는 로직을 추가하는 것이 예외 복구에 해당한다.

while(true) {
    try {
        // 파일을 읽는 코드
        break;
    } catch (IOException e) {
        // 예외 처리 후 재시도
    }
}

예외 회피(Exception Propagation)


예외 회피(Exception Propagation)는 예외에 대한 처리를 자신이 아닌 다른 코드에게 위임하는 것을 의미한다. 이는 throws 키워드를 이용하여 구현된다.

void testMethod() throws Exception {
    // 예외가 발생할 수 있는 코드
}

예외 전환(Exception Translation)


예외 전환(Exception Translation)은 발생한 예외를 적절한 예외로 바꾸어 다시 던지는 것을 말한다. 이는 catch 블록에서 새로운 예외를 생성하여 던지는 형태로 구현된다.

try {
    // 예외가 발생할 수 있는 코드
} catch (IOException e) {
    throw new CustomMyException("예외 전환", e);
}
profile
서버 백엔드 개발자

0개의 댓글