개발자의 오르막

Java - IO 예외처리 본문

Java

Java - IO 예외처리

계단 2019. 7. 25. 23:30

JAVA에서 에러가 나는 경우 중 대표적인 방법으로 데이터 IO 처리에 있다.

데이터 입출력 기능을 수행할 때 적절한 예외발생으로 동작을 STOP 해주지 않으면

우리는 비정형화된 데이터를 쌓는지도 모르고 서비스를 계속해서 사용할 것이다.

 

따라서 IO 에 있어서 예외처리는 서비스가 정상적으로 운용되기 위한 필수 요소이다.

 

 

 

# IO에서 예외처리를 안해주면 에러가 나는 이유

package temp;

import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;

public class Test076 {
	public static void main( String [] args ) {
		try{
			OutputStream out = new FileOutputStream("a.dat");
		} catch (FileNotFoundException e ) {
		
		}
	}
}

 

- 왜 try ... catch 안쓰면 에러가 나나?

  throws XXXException 형태로 선언된 함수는 XXXException 이 깐깐할 경우에 해당 예외를

  처리할 수 있는 try catch 영역 안에서 사용해야 한다.

- Exception이 더 깐깐하다 : Exception에서 걸리는 부분은 컴파일 부분에서부터 에러가 난다.
  다른 에러 함수는 컴파일은 되지만, 실행 부분에서 에러가 난다.

 

- FileNotFoundException 부분을 IOException 으로 바꿔도 에러가 안남.

  →  IOException 이 FileNotFoundException 의 조상이기 때문
      자손이 에러를 잡는 부분을 부모가 다 잡을 수 있음

- 조상의 포인터로 자손의 인스턴스를 가리킬 수 있어서 됨

 

- try/catch 문이 아닌 에러 잡는 법 

 public static void main( String [] args ) throws IOException{
	OutputStream out = new FileOutputStream("a.dat");
}

 

- 1. 에러는 발생시에 잡아주면 애러 에러 발생 안된걸로 한다. 

- 2. 에러가 발생할 수 있으면 그 사실을 명시하면 된다.

- try/catch 문은 생성자를 생성한 부분에서 에러가 났을 때 책임을 지지만

  throws를 명시하면 main을 호출한 쪽이 처리한다.

  (아래 경우는 생성자 호출한 쪽이 아니라 main을 호출한 쪽이 처리 한다.

 사원이 사고치는데 대린느 그 책임을 부장에게 넘기고, 부장이 처리한다.)

- main 함수를 호출한 쪽(JVM)이 책임을 진다 == 죽는다.

 

 public class Test077 {
	public static void main( String [] args ) throws IOException{
	try{
		OutputStream out = new FileOutputStream("a.dat");
	} catch(IOException e){
		throw e;
	}
	}
}

 

- throw e; 를 선언한 순간, 에러를 발생시켜 main 함수 호출한 쪽에서 책임을 지게 한다.

Comments