본문 바로가기

자바/개념

Exception, I/O

반응형

자바에서는 프로그램 진행 중 (개발자가 처리 가능한) 예외가 발생했을 경우 관련된 클래스로 객체를 생성하여 그 객체를 전달하려 한다. 개발자가 그 예외객체에 대한 처리를 해놓지 않았을 경우 예외 객체는 JVM한테까지 전달되고 결국 프로그램이 중단된다.

예외Exception(개발자가 조치 가능한)의 종류

  • 개발자의 조치가 불가능한 경우 에러Error 라고 부름.

  • 체크예외 - 컴파일러가 빨간색으로 예외처리를 강제하는 예외

  • 비체크예외 - 컴파일러가 빨간색 표시 안하는데 실행하다 보면 나는 에러(RuntimeException 클래스의 자손 클래스 객체들)

예외에 대한 처리 문법 2가지

  • 직접 try-catch-[finally] 작성하기.

  • 현재 메소드를 호출하는 상위 메소드에게 처리를 위임하기.


I/O - Input/Output Stream

순서를 가지는 데이터 흐름. 여러 개가 순차적으로 나가거나 들어오거나

  • 등장 클래스 : FileInputStream, FileOutputStream Reader/Writer : 프로그램에서 외부에 내보내는 데이터, 읽어오는 데이터가 문자열인 경우 stream으로는 번거로움 (매전 byte로 쪼개서 내보내고 읽은 바이트를 다시 문자열로 만들어야 하고.. 한두번이지...)

    • reader writer는 주고 받는 것이 문자열이때 편하다.
  • 등장 클래스 : InputStreamReader/OutputStreamWriter (참고로 그냥 파일에 단순 읽기 쓰기는 FileReader 또는 FileWriter를 써도 되긴 함.)

  • Buffered : 프로그램 외부와의 데이터 통신에서 통신효율성을 위한 버퍼작업이 구현된 클래스

    • 바이트 단위로 계속해서 보내기 보다는 버퍼에 데이터를 적당히 담아서 한꺼번에 보내는 편이 효율적이다. 

객체를 저장하고자 할때 쓰는 방법

  • 객체 자체를 읽고 쓸 때에는 implemets Serializable 해줘야한다.
  • 전송하고자 하는 객체에 반드시 선언이 되어있어야 한다.
  • ex> public class Book implements Serializable
	@Override
	public void open() {
		try(ObjectInputStream is = new ObjectInputStream(new FileInputStream("book.dat"));) {
			al = (List<Book>)is.readObject();
		} catch (FileNotFoundException e) {
			System.out.println("파일을 찾을 수 없습니다!");
//			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
    
    @Override
	public void close() {
		try(ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("book.dat"))) {
			os.writeObject(al);
			os.flush();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

'자바 > 개념' 카테고리의 다른 글

XML 파싱(DOM,SAX)  (0) 2020.04.15
람다식  (0) 2020.02.20
Interface & Collection API  (0) 2020.02.19
char[] 를 String으로 바꾸는 법 Tip  (0) 2020.02.18
[자바] String  (0) 2020.02.09