자바/그림으로 배우는 JAVA

[Lesson 14] 예외와 입출력 처리

hooooolly 2024. 7. 17. 00:00

예외의 기본

프로그램 실행 중 발생하는 오류를 예외(Exception)이라고 한다. 예외 처리 (exception handling)의 순서는 다음과 같다.

1. try 블록 내에서 예외가 발생 시 그 시점에 코드 실행이 중단

2. 발생된 예외의 종류가 catch 블록의 괄호 내에서 지정한 예외와 일치할 시 그 안의 코드를 실행

3. catch 블록 안의 코드가 실행된 후 try~catch 블록 다음 코드를 실행

 

자바는 예외를 받을 catch 블록을 발견하지 못하면 예외를 발생시킨 메서드로 거슬러 올라가 catch 블록을 찾는데, main() 메서드의 경우 더 이상 올라갈 수 없기 때문에 main()이 예외 처리를 할 수 있는 최후의 클래스이다.

 

finally 블록은 예외 발생 유무에 관계없이 항상 마지막에 블록 내의 코드가 실행된다. 따라서 파일 쓰기 작업이나 네트워크 연결의 종류와 같이 반드시 실시하고 싶은 중요한 프로세스는 finally 블록 안에 작성해야 한다.

 

예외와 클래스

예외는 java.lang 패키지에 속해있는 Throwable 클래스를 확장한 서브 클래스의 객체이다. Throwable 클래스는 Error 클래스와 Exception 클래스의 슈퍼 클래스이다. Error 클래스는 더 이상 프로그램을 실행시킬 수 없음을 나타내는 오류이기 때문에 예외 처리를 하지 않는다. 

 

예외 클래스의 종류별로 catch 블록을 구별하여 각 블록에 해당하는 에러를 처리할 수 있다. 모든 예외 클래스의 슈퍼 클래스인 Exception 클래스의 변수를 실인수로 사용하여 모든 예외 클래스를 받고 처리할 수 있다.

 

예외 던지기

자신만의 예외 클래스를 만들고 사용하는 방법

public void setCar (int n, double g) throws CarException { //throws Exception을 메서드 뒤에 적어서 예외를 던지는 메서드임을 선언
	if (g < 0) {
    	CarException e = new Car Exception(); //자신만의 예외 클래스 객체를 생성
        throw e; //예외 객체를 던짐
    }
}

//자신만의 예외 클래스
class CarException extends Exception {}

 

setCar을 호출하는 main() 메서드에서 try~catch문을 통해 던져진 예외를 받아 예외 처리를 한다. 

 

입출력의 기본

스트림이란 다양한 다른 장치를 동일하게 취급하기 위하여 도입된 추상적인 메커니즘이다. 스트림을 통해 다양한 장비에 대한 입력과 출력을 일관된 방법으로 처리할 수 있다. 

 

파일의 데이터를 읽어 들일 때 파일의 이름이 정해져 있지 않고 사용자가 읽고 쓰는 파일을 자유롭게 지정하고 싶을 때 명령줄 인수를 사용한다. 명령줄 인수는 프로그램이 실행할 때 사용자로부터 입력값을 받아 프로그램의 처리에 이용하는 기능이다. 명령줄 인수는 main() 메서드의 인수 String [] args로 정의되어 있다.