입출력을 향상시키는 클래스들이 존재한다.
DataInputStream / DataOutputStrea
ObjectOutputStream / ObjectInputStream
BufferedReader / BufferedWriter
등이다. 이런 클래스들을 필터클래스라고도 한다.(노드클래스는 최상위 클래스라 언급했다)
특히 Object를 읽고 쓰기 위한 ObjectOutputStream과 ObjectInputStream을 잘 알아두자.
객체의 직렬화를 위해 꼭 알아야한다.
직렬화란 객체를 스트림을 이용하여 바이트로 쓰고
역직렬화란 바이트를 스트림으로부터 읽어들어 객체로 만드는 것이다.
객체를 그냥 막 쓰고 읽어 낼 수 있다는 말이다! 하지만 모든 객체가 직렬화가 될까?
그렇지는 않다.
그럼 어떤 객체가 직렬화 될 수 있을까???
바로 Serializable 인터페이스를 구현한 객체만이 직렬화가 가능하다.
Serializable 인터페이스는 그냥 빈 인터페이스다. 하지만 직렬화가 가능한 객체와 아닌 객체를 구분하기 위해서는 꼭 implements 해줘야 한다! 잊지말자!
그럼 직렬화를 하면 객체의 모든 것을 스트림으로 전달할 수 있을까?
아니다. 단지 멤버변수만 전달이 가능하다. 그리고 멤버변수중 transient키워드로 직렬화 대상에서 제외시킬 수 있다.
객체에 있는 많은 멤버변수들의 정보를 객체로 넘겨주면 얼마나 많은 이점을 있을까? 그것은 한번 생각해보자.
댓글 없음:
댓글 쓰기