728x90
반응형
예외와 에러
- 에러 : 컴퓨터 하드웨어 고장으로 인해 응용프로그램 실행 오류 발생.
- 예외 : 잘못된 사용 또는 코딩으로 인한 오류.
- 예외가 발생하면 프로그램은 곧바로 종료된다는 점은 에러와 동일하지만, 에러와 달리 예외 처리를 통해 계속 실행 상태를 유지할 수 있음.
- 일반 예외(Exception) : 컴파일러가 예외 처리 코드 여부를 검사하는 예외.
- 실행 예외(Runtime Exception) : 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외.
예외 처리
- 예외 발생 시 프로그램의 갑작스러운 종료를 막고 정상 실행을 유지할 수 있게 하는 코드.
- 예외 처리 코드는 try~catch~finally 블록으로 구성.
- try~catch~finally 블록은 생성자 내부와 메서드 내부에서 작성.
- 자바의 모든 에러와 예외 클래스는 Throwable 클래스로 부터 상속받아 만들어짐.
다중 catch로 예외 처리하기
- catch 블록의 예외 클래스는 try 블록에서 발생된 예외의 종류를 말함. 해당 타입의 예외가 발생하면 catch 블록이 선택되어 실행.
- catch 블록이 여러 개라도 catch 블록은 단 하나만 실행됨.
- 처리해야 할 예외 클래스들이 상속 관계에 있을 때는 하위 클래스 catch 블록을 먼저 작성하고 상위 클래스 catch 블록을 나중에 작성해야함.
리소스
- 데이터를 제공하는 객체.
- 리소스는 사용하기 위해 열어야(open)하며, 사용이 끝난 다음에는 닫아야(close)함.
- 리소스를 사용하다가 예외가 발생될 경우에도 안전하게 닫는 것이 중요.
- try-with-resources 블록을 사용하면 예외 발생 여부와 상관없이 리소스를 자동으로 닫아줌.
예외 떠넘기기
- 메서드 내부에서 예외 발생 시 throws 키워드를 이용해 메서드를 호출한 곳으로 예외 떠넘기기.
- throws는 메서드 선언부 끝에 작성. 떠넘길 예외 클래스를 쉼표로 구분해서 나열.
- 나열할 예외 클래스가 많으면, throws Exception 또는 throws Throwable만으로 모든 예외 떠넘기기.
사용자 정의 예외
- 표준 라이브러리에는 없어 직접 정의하는 예외 클래스
- 일반 예외는 Exception의 자식 클래스로 선언.
- 실행 예외는 RuntimeException의 자식 클래스로 선언.
예외 발생시키기
- throw 키워드와 함께 예외 객체를 제공해 사용자 정의 예외를 직접 코드에서 발생시킬 수 있음.
- 예외의 원인에 해당하는 메시지를 제공하려면 생성자 매개값으로 전달.
다중 catch 문
- 하나의 try 블록 다음에 여러 개의 catch 블록이 오는 것.
- try 블록에서 예외가 발생하면 첫 번째 catch 블록으로 예외가 전달됨.
- 예외의 유형이 첫 번째 catch 블록과 일치하면 예외를 처리함.
- 일치하지 않으면 다음 catch 블록으로 전달.
- 예외의 유형이 확실하지 않을 때 유용.
try~catch~finally
- finally 블록은 예외 발생 여부에 관계없이 실행됨.
- 따라서 예외가 발생하든 발생하지 않든 실행해야 하는 명령문을 이 블록에 배치.
- finally 블록은 try~catch 문이 실행된 후에 실행됨.
- try 블록에서 예외가 발생하지 않으면 try 블록 실행 직후에 finally 블록이 실행됨.
- try 블록에서 예외가 발생하면 각 catch 블록이 실행된 후 finally 블록이 실행됨.
throws 키워드
- 프로그램 실행 중 메서드가 예외를 발생시킬 수 있도록 선언하려면 throws 키워드를 사용함.
- 예외가 발생했을 때 발생한 메서드에서 직접 처리하지 않고 자신을 호출한 곳으로 떠넘기려는 경우에는 반드시 throws 를 선언해야 함.
- 미확인 예외의 경우에는 throws 를 추가하지 않아도 됨.
사용자 정의 예외
- 사용자가 새로운 예외 클래스를 만들어서 이용할 수 있는 방법.
- java.lang 패키지의 Exception 예외 클래스를 상속받아 작성.
- 사용자 정의 예외 클래스에 대한 생성자를 정의함.(필수는 아님)
- toString() 메서드를 재정의하여 catch 블록에서 사용자 정의 메시지를 표시할 수 있음.
- 사용자 정의 예외 클래스를 만들고 throw 키워드로 예외를 발생시켜 호출함.
https://github.com/bottomsUp-99?tab=repositories
728x90
반응형
'Java Study' 카테고리의 다른 글
제네릭(Generic)이란? (0) | 2024.07.10 |
---|---|
JDBC 라이브러리 (0) | 2024.07.07 |
인터페이스(Interface) (0) | 2024.07.02 |
추상화 (3) | 2024.07.01 |
@Override가 있고 없고의 차이 (2) | 2024.06.30 |