Java 직렬화와 Json

java 직렬화 와 json을 통해 객체전달 할때의 차이에 대해 생각해보자.

아래와 같은 구조의 데이터가 있다.

Image for post
Image for post

여러개의 Category는 MainCategory 의 subCategory에 속하며.
Movie는 여러 Category에 속 할수 있다.

이러한 경우 Json으로 전송할경우.
Json을 만들때 구분자 ID를 지정해야만 한다.
그렇지 않을 Json 파싱할 경우 여러 카테고리에 맵핑된 Movie객체는 각 개별로 인스턴스가 생성된다.

하지만, 자바 직렬화의 경우 이러한 참조 관계에 대해서도 직렬화된 정보에 포함하기 때문에 .
여러 Category에 맵핑된 하나의 Movie객체가 생성된다.

역직렬화되어 생성된 객체를 출력하면 아래와 같다.

main (com.model.MainCategory@723279cf)
→ comedy (com.model.Category@b4c966a)
— → comedyDramaMovie (com.model.Movie@4e50df2e)
— → comedyMovie (com.model.Movie@1d81eb93)
→ drama (com.model.Category@7291c18f)
— → comedyDramaMovie (com.model.Movie@4e50df2e)

comedyDramaMovie 객체는 하나의 인스턴스로 comedy와 drama Category에 맵핑된다.

  • 추가로 자바 직렬화 시에 transient 키워드를 사용하면 해당 변수는 직렬화 시에 제외되어진다.

Java에서 Json을 사용할경우 @JsonIdentityInfo 등을 작성하여 객체정보를 명시 해야만 올바르게 파싱할수 있겠다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store