@JsonTypeInfo (+@JsonSubTypes) 1탄 (기본)

주야·2024년 4월 5일

@JsonTypeInfo (+@JsonSubTypes) 이란?

계층구조에서 부모가 자식클래스를 여러개 가지고 있을 경우를 처리위해 사용함.
예를 들면 동물(부모)에 하위(자식) 강아지,토끼, 고양이의 각기 다른 필드와 함수를 처리하기 하기 위함.

내 언어로 정리하면 직렬화/역직렬화는 모르겠고 객체를 JSON타입으로 변경 하는 것은 좋은데 이걸 다시 역직렬화도 할 수 있어야하지 않겠나?
만약 따로 타입 명기가 없다면... JSON형식 데이터를 다시 객체로 변환 시 어떤 객체를 바라보고 바꿔줘야할지 모르니...
JsonTypeInfo가 필요한듯... 데이터 타입이 단 하나면 JsonTypeInfo를 추가 하지 않더라도 아무 문제 없을듯...

@JsonTypeInfo 키워드

  • use = JsonTypeInfo.Id.NAME : 다형성을 나타내는 정보를 어떻게 사용할지 지정
    • JsonTypeInfo.Id.NAME : 타입 이름을 사용하여 다형성 처리
    • JsonTypeInfo.Id.CLASS : 클래스 정보를 사용하여 다형성 처리
    • JsonTypeInfo.Id.MINIMAL_CLASS : 최소한의 클래스 정보만 사용하여 다형성 처리. 클래스 이름을 속성으로 포함
    • JsonTypeInfo.Id.NONE: 다형성 정보를 사용하지 않음.
  • include : 다형성 정보를 어떤 방식으로 포함할지 지정
    • JsonTypeInfo.As.EXISTING_PROPERTY: 기존의 JSON 속성을 사용하여 다형성 정보 포함
    • JsonTypeInfo.As.WRAPPER_OBJECT: 다형성 정보를 JSON 객체로 감싸서 포함
    • JsonTypeInfo.As.WRAPPER_ARRAY: 다형성 정보를 JSON 배열로 감싸서 포함
    • JsonTypeInfo.As.EXTERNAL_PROPERTY: 외부 속성에 다형성 정보를 포함
    • JsonTypeInfo.As.PROPERTY: 다형성 정보를 JSON 속성으로 포함
  • property : 다형성 정보를 포함할 JSON 속성의 이름을 지정
  • visible : 다형성 정보가 JSON에 노출되어야 하는지 여부를 지정(기본값은 true)

@JsonSubTypes

  • value : 매핑할 하위 클래스를 지정
  • name : 해당 하위 클래스에 대한 이름 지정(생략가능)

어느 훌륭하신 개발자 분이 정리를 너무 잘해놓으셔서... 링크 첨부합니당.


Jackson이란?

Java진영에서 데이터 역/직렬화를 처리해주는 Java용 고성능 JSON프로세서이다.


데이터 직렬화 후 DB에 넣는 이유가 무엇일까?

  • JSON 데이터타입을 지원하는 DB는 JSON타입 데이터 조회 시 WHERE 조건 사용이 가능함.
  • 저장 시 변경된 칼럼만을 업데이트 해 자원 낭비 최소화 효과있는 듯?

히스토리테이블에 마스터 테이블에 매칭된느 모든 칼럼을 만들지 않고, 위와 같이 최소한의 칼럼생성 후 JSON 형태로 데이터를 넣는다.

@JsonTypeInfo 활용한 코드 예제

다음 편에 계속 됨.
JsonTypeInfo 2탄 (심화) 보러가기



번 외) Reflection은 무엇인가요?

Bealdung @JsonSubTypes vs Reflections 비교 글 보러가기

profile
개발자

0개의 댓글