[JAVA] Error & Exception

in·2023년 9월 6일
0

JAVA

목록 보기
8/9

📌 Error(오류)

시스템 레벨에서 발생하여 개발자가 조치할 수 없는 수준
➡️ 컴파일 시 문법적인 오류와 런타임시 널포인트 참조와 같은 오류로 프로세스에 심각한 문제를 야기시켜 프로세스를 종료시킬 수 있음
ex. 메모리 부족, 스택 오버플로우

OutOfMemoryError

JVM에 설정된 메모리의 한계를 벗어난 상황일 때 발생
힙 사이즈 부족, 너무 많은 class 로드, 가용 가능한 swap이 없을 때, 큰 메모리의 native 메소드가 호출될 때 등
➡️ dump 파일분석, JVM 옵션 수정 등으로 해결 가능

📌 Exception(예외)

개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생
➡️ 컴퓨터 시스템의 동작 도중 예기치 않았던 이상 상태가 발생하여 수행 중인 프로그램이 영향을 받는 것

예외가 발생하는 원인
  • 사용자의 잘못된 데이터 입력
  • 잘못된 연산
  • 개발자가 로직을 잘못 작성
  • 하드웨어, 네트워크 오작동
  • 시스템 과부하

Exception Handling

잘못된 하나로 인해 전체 시스템이 무너지는 결과를 방지하기 위한 기술적인 처리

  1. 예외 잡기 : 직접 try-catch를 이용해서 예외에 대한 최종적인 책임을 지고 처리하는 방식
  • try에는 위험한 로직이, catch에는 예외 발생 시 수행할 로직 들어감
  • try 중이라도 예외가 발생한 다음의 코드들은 실행되지 않으며 catch 구문으로 넘어감
  • catch 구문은 else if 처럼 여러개 쓸 수 있음
  • finally는 마지막에 실행하고 싶은 로직이 들어가며 대표적으로 .close()가 있음
  1. 예외 던지기 : throws Exception을 이용해서 발생한 예외의 책임을 호출하는 쪽이 책임지도록 하는 방식
  • 예외 처리를 현재 메소드가 직접 처리하지 않고 호출한 곳에다 예외의 발생 여부 통보
public class ThrowsEx {
    public void call_A() throws Exception {
        call_B();
    }

    private void call_B() throws Exception {
        call_C();
    }

    private void call_C() throws Exception {
        System.out.println(1 / 0);
    }

    public static void main(String[] args) throws Exception {
        ThrowsEx test = new ThrowsEx();
        test.call_A();
    }
}

종류

  1. Checked Exception : 예외처리가 필수이며, 처리하지 않으면 컴파일되지 않음
  • Runtime Exception 이외에 있는 모든 예외
  • IOException, SQLException 등
  1. Unchecked Exception : 컴파일 때 체크되지 않고 Runtime에 발생하는 Exception
  • RuntimeException 하위의 모든 예외
  • NullPointerException, IndexOutOfBOundException 등

여러가지 예외들

✔️⭐️ ArrayIndexOutOfBoundsException
: 배열의 범위를 벗어난 index를 접근할 시 발생

✔️⭐️⭐️ ClassCastException
: 변화할 수 없는 타입으로 객체 반환 시 발생

✔️⭐️⭐️⭐️ NullPointException
: 존재하지 않는 레퍼런스 참조시 발생

✔️⭐️⭐️ NumberFormatException
: 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시 발생

Throwable 클래스

예외처리를 할 수 있는 최상위 클래스
Exception과 Error는 Throwable의 상속을 받음

[참고 자료]

🔗링크1
🔗링크2

0개의 댓글