2013년 1월 17일 목요일

[Java] 입출력 기능/성능 향상 클래스와 직렬화

입출력을 향상시키는 클래스들이 존재한다.

DataInputStream / DataOutputStrea
ObjectOutputStream / ObjectInputStream
BufferedReader / BufferedWriter

등이다. 이런 클래스들을 필터클래스라고도 한다.(노드클래스는 최상위 클래스라 언급했다)

특히 Object를 읽고 쓰기 위한 ObjectOutputStream과 ObjectInputStream을 잘 알아두자.

객체의 직렬화를 위해 꼭 알아야한다.

직렬화란 객체를 스트림을 이용하여 바이트로 쓰고
역직렬화란 바이트를 스트림으로부터 읽어들어 객체로 만드는 것이다.

객체를 그냥 막 쓰고 읽어 낼 수 있다는 말이다! 하지만 모든 객체가 직렬화가 될까?
그렇지는 않다.
그럼 어떤 객체가 직렬화 될 수 있을까???

바로 Serializable 인터페이스를 구현한 객체만이 직렬화가 가능하다.
Serializable 인터페이스는 그냥 빈 인터페이스다. 하지만 직렬화가 가능한 객체와 아닌 객체를 구분하기 위해서는 꼭 implements 해줘야 한다! 잊지말자!

그럼 직렬화를 하면 객체의 모든 것을 스트림으로 전달할 수 있을까?
아니다. 단지 멤버변수만 전달이 가능하다. 그리고 멤버변수중 transient키워드로 직렬화 대상에서 제외시킬 수 있다.

객체에 있는 많은 멤버변수들의 정보를 객체로 넘겨주면 얼마나 많은 이점을 있을까? 그것은 한번 생각해보자.


댓글 없음:

댓글 쓰기