⌨Programming/Java

직렬화와 마셜링

PangLog 2023. 11. 9. 14:02

직렬화(Serializable)

  • 자바에서 사용되는 데이터들을 다른 자바 시스템에서도 사용할 수 있도록 Binary형식이나 byte stream형태로 바꾸는 작업
  • 직렬화의 대상은 객체의 값이나 컨텐츠이다, 클래스의 정의는 포함되지 않는다(메서드 같은 정보)
  • JVM위의 heap이나 stack메모리에 있는 데이터들을 직렬화를 통해 변환하고 DB같은 저장소에 저장하거나 다른 컴퓨터의 자바 시스템에서 가져가 데이터를 역직렬화를 통해 사용

왜 하는데?

  1. 예를 들어 내 컴퓨터에 0x00A라는 주소를 가진 A객체가 있을 때 이 주소값만을 그대로 다른 컴퓨터로 보낸다면 이는 동일한 A객체를 가르키지 않을 것이다. 때문에 실제로 주소값을 타고 넘어가 실제값을 byte stream으로 변환하여 넘기기 위해 사용한다.
  2. 자바를 예를 들면, 여러가지 레퍼런스타입을 외부로 보낼 수 있다. 기본형, array등은 JSON으로 쉽게 넘길 수 있지만 자바만의 컬렉션, 클래스, 인터페이스, 커스텀 타입일 경우 데이터를 매칭시키는 추가 작업(Parsing)이 필요하다.

마샬링(Marshalling)

  • 코드베이스를 포함하여 객체를 직렬화 한다.
코드베이스란?

객체의 구현을 어디서 찾을 수 있는지에 대한 정보.
다른 프로그램에게 객체를 전달했을 때 이 객체를 다시 사용하러면 데이터 타입에 관한 정보가 있어야한다. 이 때 코드베이스는 이 데이터가 어디에 있는지 알려주는 정보를 뜻한다.

참고자료

 

반응형