본문 바로가기
JAVA

예외 처리(Try-Catch)

by person456 2024. 2. 4.

1. 예외와 에러

 

1) Error : 프로그램을 잘못 작성한 경우.

- 디버깅으로 코드를 개선

- ex) 메모리부족, Stack Overflow

 

2) Exception : 프로그램의 작성 의도와 달리 사용되는 경우

- 디버깅으로 코드를 개선, 예외 처리 코드로 상황 수습

- ex) null인 객체 사용, 0나누기 등

 

--> 예외 처리(Exception Handling)란 예외 발생시 프로그램의 비정상적 종료를 막고, 정상적인 실행 상태를 유지하는 것

 

2. 계층

 

1) Exception은 Checked Exception과 Unchecked Exception으로 나뉜다.

- Checked Exception은 예외에 대한 대처 코드가 없으면 컴파일이 진행되지 않음

ex) BufferedReader를 사용할 때 메서드에 예외처리 코드가 없을 경우 컴파일 오류가 발생

- Unchecked Exception은 예외에 대한 대처 코드가 없더라도 컴파일은 진행됨

ex) int[] arr = {1,2} --> System.out.println(arr[3])을 하더라도 컴파일은 진행되고 Runtime 환경에서 ArrayIndexOut 예외가 발생함

즉, Unchecked Exception은 모두 Runtime Exception임.

 

3. Try - Catch

 

- 예외를 처리하여 프로그램의 비정상적인 종료를 막고, 정상적인 실행 상태를 유지하는 기능을 지님

- try 블럭 안에는 예외가 발생할 수 있는 코드를 작성하고 catch 블럭 안에는 예외가 발생하였을 때의 처리 코드를 작성

- try 블럭에서 예외가 발생하면 JVM(Java Virture Machine)이 Exception 클래스의 객체를 생성 후 catch 블럭으로 던짐

-> 적당한 catch 블럭을 만나지 못한다면 예외 처리 실패

 

1) 다중 Exception Handling

 

- 여러개의 Catch 블럭을 사용하는 것으로, try 블럭 안에 발생할 수 있는 여러 예외들을 처리하는 방법을 의미함

- JVM이 던진 예외는 catch 문장을 찾을 때 다형성이 사용됨

- catch블럭을 찾아가는 것은 Switch - Case와 비슷한 동작으로 위에 작성된 Catch 블럭부터 아래로 이동함

- 따라서 최상단의 Catch 블럭에 가장 큰 Exception 조상을 둔다면, 그 아래 세부 Exception은 동작할 기회를 잃어버리므로, 가장 큰 조상은 가장 아래에 배치하는 것이 올바름

 

2) try-catch-finally

- finally는 예외 발생 여부와 상관없이 언제나 실행.

- 중간에 return을 만나는 코드가 있더라도 finally를 먼저 실행한 이후 return을 진행

- 주요 목적은 try 블럭에서 사용한 리소스 반납

 

3) try-with-resource

- JDK 1.7이상부터 사용 가능한 리소스의 자동 close 처리 기능임

- try(리소스 타입 res1 = 초기화; 리소스 타입 res2 = 초기화 ...){}

-> 이 방식을 사용하여 try 선언문에 작성된 객체들에 대한 자동 close(리소스 반납)를 진행함.

 

4) throws

- method에서 처리해야할 하나 이상의 예외를 호출한 것으로 전달 (책임 위임)

- 예외가 없어지는 것이 아닌, 단순히 전달되는 일임

- 처리하려는 예외의 조상 타입으로 throws 처리 가능(다형성)

'JAVA' 카테고리의 다른 글

2) 변수  (0) 2023.12.26
1) JAVA의 장점  (0) 2023.12.26