직렬화(Serializable)
- 자바에서 사용되는 데이터들을 다른 자바 시스템에서도 사용할 수 있도록 Binary형식이나 byte stream형태로 바꾸는 작업
- 직렬화의 대상은 객체의 값이나 컨텐츠이다, 클래스의 정의는 포함되지 않는다(메서드 같은 정보)
- JVM위의 heap이나 stack메모리에 있는 데이터들을 직렬화를 통해 변환하고 DB같은 저장소에 저장하거나 다른 컴퓨터의 자바 시스템에서 가져가 데이터를 역직렬화를 통해 사용
왜 하는데?
- 예를 들어 내 컴퓨터에 0x00A라는 주소를 가진 A객체가 있을 때 이 주소값만을 그대로 다른 컴퓨터로 보낸다면 이는 동일한 A객체를 가르키지 않을 것이다. 때문에 실제로 주소값을 타고 넘어가 실제값을 byte stream으로 변환하여 넘기기 위해 사용한다.
- 자바를 예를 들면, 여러가지 레퍼런스타입을 외부로 보낼 수 있다. 기본형, array등은 JSON으로 쉽게 넘길 수 있지만 자바만의 컬렉션, 클래스, 인터페이스, 커스텀 타입일 경우 데이터를 매칭시키는 추가 작업(Parsing)이 필요하다.
마샬링(Marshalling)
- 코드베이스를 포함하여 객체를 직렬화 한다.
코드베이스란?
객체의 구현을 어디서 찾을 수 있는지에 대한 정보.
다른 프로그램에게 객체를 전달했을 때 이 객체를 다시 사용하러면 데이터 타입에 관한 정보가 있어야한다. 이 때 코드베이스는 이 데이터가 어디에 있는지 알려주는 정보를 뜻한다.
참고자료
- https://hyesun03.github.io/2019/09/08/marshalling-vs-serialization/
- https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A7%81%EB%A0%AC%ED%99%94Serializable-%EC%99%84%EB%B2%BD-%EB%A7%88%EC%8A%A4%ED%84%B0%ED%95%98%EA%B8%B0
- https://donghyeon.dev/2020/11/07/%EC%A7%81%EB%A0%AC%ED%99%94%EC%99%80-%EB%A7%88%EC%83%AC%EB%A7%81/
반응형