티스토리 뷰

Object Serialize

  •  객체의 직렬화란 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 송수신이 가능하게 하는 것을 의미합니다. 
  •  비유를 하자면 어떤 어드벤쳐 게임이 프로그램이 있다고 합시다. 게임이 진행되면 게임 캐릭터는 계속 해서 상태가 변합니다.
    • '더 강해지거나, 약해지거나', '무기를 잃거나, 그 무기를 사용하거나' 할 수도 있죠.
    • 하지만 사용자가 게임을 끄고 다시 돌아왔을때, 캐릭터의 상태가 초기화 되면 안되겠죠? 저장을 해야 합니다. 
  • 이 때 데이터를 만들어낸 자바 프로그램에서만 사용한다면 직렬화를 사용하여 납작해진 객체가 저장된 파일을 만들고 나중에파일을 열 때는 프로그램에서 직렬화된 객체를 읽어서 다시 살아 숨쉬는, 힙에 들어있는 형태의 객체로 만들어 줍니다. 

객체 직렬화 방법

  • Java 코드를 이용해 객체를 직렬화하는 방법은 아래와 같습니다.
  • 동작 절차를 자세히 보자면
    1. FileOutPutStream 객체를 만들어 파일은 연결합니다.
    2. ObjectOutputStreanm을 사용하면 객체를 저장할 수 있는데 파일에 직접 연결할 수는 없습니다.
      • 보조 객체가 필요합니다. 이런 과정을 한 스트림을 다른 스트림과 연쇄(chain) 한다고 부릅니다.
    3. characterOne, characterTwo, characterThree 로 참조되는 객체를 직렬화하고 "MyGame.ser"에 저장합니다.
    4. 맨 위에 있는 스트림을 닫으면 그 믿에 있는 스트림도 모두 닫힙니다.
1.
FileOutputStream fileStream = new FileOutputStream("MyGame.ser");
//FileOutputStream 을 만든다

2.
ObjectOutPutStream os = new ObjectOutPutStream(fileStream);
//ObjectOutPutStream 을 만든다

3.
os.writeObject(characterOne);
os.writeObject(characterTwo);
os.writeObject(characterThree);
//characterOne, characterTwo, characterThree 로 참조되는 객체를 직렬화하고 "MyGame.ser" 에 저장한다.

4. 
os.close();

  •  자바 파일 입출력 API 에는 파일이나 네트워크 소켓과 같은 출발지 또는 목적지로의 연결을 나타내는 연결 스트림 (connection stream)과 다른 스트림에 연쇄되어야만 쓸 수 있는 연쇄 스트림(chain stream)이 있습니다.
  • 위 처럼 최소한 스트림 두 개를 연결 해야만 유용한 작업을 할 수 있는 경우도 있습니다. 왜 일까요??
  • 연결 스트림은 일반적으로 너무 저수준이기 때문입니다. 예를 들자면 FileOutputStream에는 바이트를 저장하기 위한 메소드가들어있지만 실제 바이트 단위로 저장하는 경우는 별로 없습니다.
    • 우리가 실제로 저장해야 하는 것은 객체이므로 더 고수준의 연쇄 스트림이 필요한 것이죠.

 

  •  그런데 사실 각 클래스는 하나씩의 기능만 잘 발휘하는 것이 좋습니다. 이렇게 다양한 연결 및 연쇄 스트림을 조합하면 유연한 프로그래밍을 할 수 있습니다.
    • 객체의 직렬화 과정은 위의 그림과 같은 과정으로 진행 됩니다.

 

 


관련글

 

JAVA 역직렬화 : 객체 복구

어떤 객체를 직렬화하는 것과 관련된 가장 중요한 점은 나중에 JVM을 다시 실행시킬 때, 또는 아예 다른 JVM에서 실행시킬 때에도 원래의 상태로 되돌릴 수 있어야 한다는 점인데, 역질렬화는 직렬화를 뒤집어놓은..

jinseongsoft.tistory.com

 

[Java] Gson 라이브러리 적용 및 기본 사용법

이번 시간에는 Gson 라이브러리를 적용해보고 간단하게 사용해보는 방법에 대해서 알아보겠습니다. Gson이란? Gson의 정의는 아래와 같습니다. Gson(구글 Gson, Google Gson)은 JSON의 자바 오브젝트의 직렬화, 역..

jinseongsoft.tistory.com

 

(Java) Gson 사용시 ZonedDateTime JSON Serialize/Deserialize 방법

들어가며 Gson을 사용하여 ZonedDateTime 객체를 Serialize/Deserialize 하는 경우가 있다. public void test() { String json = new GsonBuilder().create().toJson(ZonedDateTime.now()); ZonedDateTime dateTim..

jinseongsoft.tistory.com

 

JAVA serialVersionUID 사용법

◆ serialVersionUID - 객체를 직렬화 하면 그 객체(그 객체와 관련된 모든 객체 포함) 에는 그 객체가 속한 클래스의 버전 ID 번호가 찍힙니다. 그 ID를 serialVersionUID 라고 부르며 그 값은 클래스 구조에 대..

jinseongsoft.tistory.com


끝으로

이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏

광고 클릭은 많은 힘이 됩니다! 

 

 

 

 

 

 

 

 

 

반응형
댓글