Marshalling과 자바 Serialization의 차이

dropKick·2020년 8월 1일
1

Deep Java See

목록 보기
9/21

마샬링과 직렬화의 차이

원래 데이터 포맷을 변경하는 것은 직렬화만 알고 있었는데, golang을 하던 중 라이브러리에 Marsal이란게 있어서 찾아봄.

직렬화 (Serialization)

데이터 직렬화는 자바에서 보통 쓰는 데이터 변환 방법이다.
자바에는 여러 객체가 존재하고, 각 객체의 참조는 전부 다를 수 있다.
이러한 객체의 참조를 다른 곳에서 쓰고싶다면 객체의 값을 담고 있는 주소를 보내야 한다.
그런데 서로 다른 자바 시스템에서 동일한 주소를 가지고 있다고 두 값이 동일한 주소에 있다고 볼 수는 없다.
따라서 어떤 시스템에서도 사용할 수 있는 Byte Stream이라는 동일한 데이터 포맷으로 변환하는 것이 직렬화이다.
(데이터를 순차적인 바이트로 변환)
image

마샬링 (Marshalling)

직렬화가 객체의 데이터를 Byte Stream으로 변환하는 데이터 포맷팅 기술이라면, 마샬링은 직렬화가 포함 된 개념이다.
1. 데이터를 바이트로 변환한다.(직렬화)
2. 바이트를 전송한다.
3. 바이트를 데이터로 변환한다.(역직렬화)
마샬링은 자바 직렬화 <-> 직렬화 뿐만이 아닌 csv, json 같은 것도 포함하는 개념이랄까?

왜 자바에서는 직렬화를 사용할까?

자바 시스템 내에서도 csv, json과 같은 데이터 포맷을 사용하지 않고, 왜 직렬화를 사용할까?
객체가 어떤 복잡한 클래스 구조를 가지고 있더라도 직렬화 기준에 맞추어 직렬화를 한다면 데이터 타입이 자동으로 맞추어지기 때문에 자바 시스템 내에서는 어떤 객체든 사용할 수 있다는 장점때문에 쓴다고 한다.
반대로 역직렬화는 데이터를 바로 객체로 사용할 수 있다.

0개의 댓글