본문 바로가기
프로그래밍 언어/java

[java] 예외 처리

by m2162003 2021. 4. 5.

오류(Error)

오류엔 두 가지 종류가 존재한다.

1. 컴파일 오류: 코드 작성 중 발생하는 문법적 오류. 요즘은 컴파일러가 잘되어있어서 컴파일 단계에서 모두 잡아준다.

2. 실행 오류: 설계 로직이 잘못되어 생기는 오류. 런타임에러(프로그램 중지)가 있다.  예외처리를 통해 프로그램의 비정상 종료를 막고 로그를 남기는 것을 목표로 한다.

 

 

오류와 예외

시스템 오류

가상머신에서 발생. 프로그래머가 처리할 수 없다. 동적 메모리를 다 사용한 경우나 stack over flow 같은 오류가 여기 해당한다.

예외

프로그램에서 제어할 수 있는 오류. 읽어내려는 파일이 없다/소켓 연결 오류 등

 

 

예외 클래스

모든 예외 클래스의 최상위 클래스는 Exception클래스이다.

 

 

예외 처리

try-catch

try {
    예외가 발생할 수 있는 코드
}catch (처리할 예외 타입 e){
	try 블록 안에서 예외가 발생했을 때 수행되는 부분
}
	public static void main(String[] args) {
		int[] arr = new int[5];

		try {
			for (int i = 0; i <= 5; i++) {
				System.out.println(arr[i]);
			}
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("error: " + e);
		}

	}

 

try-catch-finally

try {
    예외가 발생할 수 있는 코드
}catch (처리할 예외 타입 e){
	try 블록 안에서 예외가 발생했을 때 수행되는 부분
}finally {
	예외 발생 여부와 상관없이 항상 수행되는 부분
    리소스를 정리하는 코드를 주로 쓴다.
}

 

try-with-resources

리소스를 자동으로 해제하도록 제공해주는 구문 ex) 파일 오픈한 후 자동으로 닫기

해당 리소스가 AutoCloseable을 구현한 경우 close()를 명시적으로 호출하지 않아도 try 블록 내에서 오픈된 리소스에 대해 close가 자동 호출된다.

자바7부터 사용가능

public class AutoCloseObj implements AutoCloseable {
	@Override
	public void close() throws Exception {
		System.out.println("close()가 실행되었습니다.");
	}
}
public class AutoCloseTest {
	public static void main(String[] args) {
		AutoCloseObj obj = new AutoCloseObj();

		// 자바9부터는 obj만 선언해도 사용가능
		try (AutoCloseObj obj2 = obj) {
			throw new Exception();

		} catch (Exception e) {
			System.out.println(e);
		}
	}
}

 

FileInputStream의 경우 AutoCloseable을 구현하고 있다. 

public static void main(String[] args) {

		try (FileInputStream fis = new FileInputStream("a.txt")) {
		} catch (FileNotFoundException e) {
			System.out.println(e);
		} catch (IOException e) {
			System.out.println(e);
		}
}

'프로그래밍 언어 > java' 카테고리의 다른 글

[java] 예외처리2  (0) 2021.04.05
[java] Class 클래스, 자바 리플렉션  (0) 2021.03.18
[java] String, Wrapper 클래스  (0) 2021.03.18
[java] Object 클래스  (0) 2021.03.18
[java] 인터페이스 다중 상속  (0) 2021.03.12

댓글