저번 시간에 이어, 이번엔 Java의 직렬화에 대한 질문들에 대해 알아보겠습니다. Java를 공부했을지라도 생소한 내용일 수 있습니다. 저도 면접 질문을 정리하고 대비하며 마주한 질문들이기 때문에 처음에 많이 어색했는데요, 공부하시다가 써본적이 있는 개념일 수도 있으실 겁니다.
Q: Java에서 직렬화란 무엇인가요?
객체의 상태를 영속화 하는 메커니즘으로, 객체를 다른 환경에 저장했다가 저장한 상태 그대로 재사용할 수 있게 만드는 과정입니다.
Q: Java 직렬화는 언제 사용하나요?
객체 상태를 영속해야 할 필요가 있을 때 사용합니다.
- File, DB, Cache 등에 저장
- 바이트 스트림으로 변환해서 전송할 때
Q: Java 직렬화는 어떻게 사용하나요?
Serializable interface를 클래스에서 implements합니다. 그리고 ObjectOutputStream이 사용하는 ByteArrayOutputStream 객체와 toByteArray() 메서드를 사용해서 직렬화된 바이트스트림을 획득할 수 있습니다.
여기서 역직렬화는 ObjectInputStream의 readObject()메서드를 이용합니다.
- Serializable은 아무 것도 없지만, 사용하지 않으면, NotSerializableException이 발생합니다.
- 직렬화 & 역직렬화 흐름
- Object – writeObject – DB / File / Memory – readObject – Object
Q: serialVersionUID를 선언하는 이유가 무엇인가요?
JVM은 직렬화나 역 직렬화 시점의 클래스에 대해 version 번호를 부여합니다. 클래스의 정의가 바뀌게 되면, version 번호가 재 할당되는데 직렬화와 역 직렬화의 version 번호가 같은지 검사해야 하므로 사용합니다.
Q: 직렬화의 단점은 무엇인가요?
직렬화 시 용량이 커지게 되거나 객체 인스턴스의 변경 시 예외가 발생합니다.
마치며
이번 시간엔 Java의 직렬화에 대해 알아보았습니다.
다음 시간에는 Error와 Exception의 차이점에 대해 알아보겠습니다.
답글 남기기