본문 바로가기

Java/기본

[Java] IO스트림 사용하기 - 객체 직렬화(Serialize)

직렬화란?

직렬화(Serialization)란 한마디로 코드 변환작업이다.

좀더 상세히 말하자면 객체를 바이트 코드로 바꾸는 작업을 의미한다.

 

직렬화를 하는 이유

직렬화는, 우리가 컴퓨터로 작업할 때 zip 파일을 사용하는 것과 비슷하다고 볼 수 있다. 그냥 폴더자체는 이메일에 첨부하거나 온라인에 업로드하는게 쉽지 않다. 파일이 깨지는 경우도 있다. 하지만 zip 파일을 사용하면 안전하게 파일을 첨부하거나 업로드할 수 있다. 필요할 때 가져다쓰는 것도 쉽다.

 

자바는 객체를 중심으로 코드가 이루어진다. 근데 객체는 문자가 아니라서 출력하려면 바로 출력이 안되고 스트림을 활용해 출력해야 한다. 대표적으로 바이트스트림 등을 이용해 출력이 가능하다. 직렬화란 바로 객체의 데이터를 연속적인 바이트 코드로 변경하는 작업을 말한다.

 

직렬화를 적용하는 경우

  • 객체 저장
  • 파일 출력
  • 네트워크 전송

객체 직렬화, 객체 역직렬화

직렬화와 역직렬화는 작업이름에서 알 수 있듯이 반대되는 작업이다. 직렬화는 객체를 바이트코드로 바꾸는 작업이다. 역직렬화는 바이트를 객체로 바꾸는 작업이다.

  • 객체 직렬화 serialization ; 객체의 데이터(필드값)를 연속적인 바이트로 변경하는 작업 -> 작업 후 [쓰기] 가능
  • 객체 역직렬화 deserialization ; 연속적인 바이트를 객체의 데이터(필드값)로 복원하는 것 -> 작업 후 [읽기] 가능

Serializable 인터페이스

  • 객체를 직렬화할 때 모든 필드를 바이트로 변환해도 문제없다는 마크를 붙이는 역할
  • Serializable 인터페이스를 구현한 클래스만 직렬화를 할 수 있다
  • Serializable 인터페이스 자체에는 필드와 메서드 없음