개발자의 오르막
Java - IO 예외처리 본문
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 함수 호출한 쪽에서 책임을 지게 한다.
'Java' 카테고리의 다른 글
[Log4j 1.2.16-ver Json Layout 적용기 #02] 기존 공통 라이브러리 의존성에 따른 Log4j2 Mig 이슈 (0) | 2022.07.11 |
---|---|
[Log4j 1.2.16-ver Json Layout 적용기 #01] 로그 개선 방향 선정 (0) | 2022.07.04 |
Java - compile (0) | 2019.08.23 |
Java-예외처리 (0) | 2019.07.25 |
자료형 변수 (0) | 2019.07.18 |