JAVA Study

[JAVA]예외 처리

영하10도 아아 2024. 4. 11. 18:01

예외 처리


예외 클래스

 

자바에서는 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류 발생하는 것을 에러(error)이라고 한다. 그리고 에러 이외에 프로그램 자체에서 발생하는 오류는 예외(exception)라고 부른다.

 

예외(exception)란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외는 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

 

자바는 예외가 발생할 가능성이 높은 코드를 컴파일 할 때 예외 처리 유무를 확인한다. 만약 예외 처리 코드가 없다면 컴파일이 되지 않는다.

 

 

 

 

예외와 예외 클래스

 

 

예외에는 두 가지 종류가 있다. 하나는 일반 예외(exception)이고, 다른 하나는 실행 예외(runtime exception)이다.

 

 

일반 예외 : 컴파일러 체크 예외라고도 하는데, 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일 하는 과정에서 해당 예외 처리 코드가 있는지 검사한다. 그리고 예외 처리 코드가 없다면 오류가 발생한다.

 

실행 예외 : 컴파일하는 과정에서 확인할 수 없는 예외이다. 즉 개발자가 경험에 의존하여 미리 예상하고 처리해야 하는 예외를 말한다.

 

 

자바에서는 예외를 클래스로 관리한다. 모든 예외 클래스는 java.lang.Exception을 상속받는다.

일반 예외와 실행 예외 클래스는 RuntimeException을 기준으로 구별한다. RuntimceException의 하위 클래스가 아니면 모두 일반 예외이다.

 

 

 

실행 예외 종류

 

NullPointerException : 객체 참조가 없는 상태. 즉 null 값을 갖는 참조 변수로 객체 접근 연산자인 도트(.)를 사용했을 때 발생한다.

객체가 없는 상태에서 객체를 사용하려 할 때 발생하는 예외이다.

 

ArrayIndexOutOfBoundsException : 배열에서 인덱스 범위를 초과할 경우 발생한다.

 

NumberFormatException : 문자열을 숫자로 변경할 때, 매개값인 문자열이 숫자로 변환될 수 있다면 숫자를 리턴하지만, 숫자로 변환될 수 없는 문자가 포함되어 있을 때 발생한다.

 

ClassCastException : 타입 변환(casting)은 상위 클래스와 항위 클래스 간에 발생하고 구현 클래스와 인터페이스 간에도 발생한다.

이러한 관계가 아니라면 클래스는 다른 타입으로 변환할 수 없기 때문에 발생한다.

 

 

정리

 

예외 : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 발생하는 프로그램 오류를 말한다. 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

 

예외 클래스 : 자바에서는 예외를 클래스로 관리한다. 실행 도중 예외가 발생하면 해당 예외 클래스로 객체를 생성, 그리고 예외 처리 코드에서 예외 객체를 이용할 수 있도록 해준다. 모든 예외 클래스는 java.lang.Exception을 상속받는다.

 

일반 예외 : 컴파일러 체크 예외라고도 하는데, 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에, 예외 처리 코드가 없다면 컴파일 에러가 발생.

 

실행 예외 : 컴파일러 넌 체크 예외라고도 한다. 실행 시 예측할 수 없디 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리 코드가 있는지 검사하지 않는다.

 


 

 

예외 처리

예외 처리(exception handling)이란, 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것이다.

 

자바의 코드를 예외 처리를 한다고 해서 프로그램의 예외 상황 자체를 막을 수는 없다.

 

 

 

try-catch-finally

 

1.try 블록에는 예외 발생 가능 코드가 위치한다.

 

2. try 블록의 코드가 정상 실행되면 catch 블록의 코드를 실행되지 않고 finally 코드를 실행한다.

만약 try 블록 코드에서 예외가 발생하면 즉시 실행을 멈추고 catch 블록 코드로 이동해 예외 처리 코드를 실행한다.

 

3.finally 블록은 생략이 가능하다. 예외 발생 여부와 상관없이 항상 실행할 내용이 있을 경우에만 작성한다.

 

 

 

예외 떠넘기기

 

 

메소드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 예외를 처리하는 것이 기본이지만, 경우에 따라서는 메소드를 호출한 곳으로 예외를 떠넘길 수도 있다. 이떄 사용하는 키워드가 throws 이다. throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 한다.

 

throws 키워드가 붙어 있는 메소드는 반드시 try 블록 내에서 호출되어야 한다. 그리고 catch 블록에서 떠넘겨 받은 예외를 처리해야 한다.

'JAVA Study' 카테고리의 다른 글

[JAVA] 컬렉션 프레임워크  (0) 2024.04.16
[JAVA]중첩 클래스  (0) 2024.04.11
[JAVA] 상속(Inheritance)  (0) 2024.04.04
스터디 1회차 - 클래스  (0) 2024.04.02