All Honey Tip

[기술 면접] 9. Java에서 직렬화란 무엇인가요?

수정 일:

발행 일:

Java에서 직렬화란 무엇인가요?

저번 시간에 이어, 이번엔 Java의 직렬화에 대한 질문들에 대해 알아보겠습니다. Java를 공부했을지라도 생소한 내용일 수 있습니다. 저도 면접 질문을 정리하고 대비하며 마주한 질문들이기 때문에 처음에 많이 어색했는데요, 공부하시다가 써본적이 있는 개념일 수도 있으실 겁니다.

Java에서 직렬화란 무엇인가요?



Q: Java에서 직렬화란 무엇인가요?

객체의 상태를 영속화 하는 메커니즘으로, 객체를 다른 환경에 저장했다가 저장한 상태 그대로 재사용할 수 있게 만드는 과정입니다.







Q: Java 직렬화는 언제 사용하나요?

객체 상태를 영속해야 할 필요가 있을 때 사용합니다.

  1. File, DB, Cache 등에 저장
  2. 바이트 스트림으로 변환해서 전송할 때







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의 차이점에 대해 알아보겠습니다.

Java에서 직렬화란 무엇인가요?


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다