IT 개발노트

@JsonCreator 사용 이유 본문

기초튼튼/JAVA

@JsonCreator 사용 이유

limsungju 2024. 2. 6. 14:56

객체를 캡슐화 하는 것은 권장 습관이므로 setter를 사용한다고 보면 된다. 근데 만약 deserialize 한 후에 해당 객체가 immutable 하기를 원한다면? setter가 없어야 한다.

이때 기본 생성자 + setter 조합을 대신해 객체를 생성할 수 있도록 해주는 것이 @JsonCreator 어노테이션이다. 이 어노테이션을 생성자나 팩토리 메소드 위에 붙이면 jackson이 해당 함수를 통해 객체를 생성하고 필드를 생성과 동시에 채운다. 이렇게 생성자나 팩토리 메소드를 통해 필드 주입까지 끝내버리면 setter 함수가 필요 없게 된다. jackson을 통해 deserialze한 immutable한 객체를 얻을 수 있는 것이다. 그래서 @JsonCreator를 쓰는 것 같다.

생성자를 포함한 함수는 컴파일 되면 파라미터의 이름은 var0, var1 처럼 임의적으로 바꿔 버린다. 그래서 jackson이 아무리 열심히 json을 파싱해서 key value를 얻어도 이걸 @JsonCreator가 붙은 함수에 어떤 순서로 호출해야 하는지 알 수 없다. 그래서 각 파라미터마다 @JsonProperty(name=“blah”)를 넣어줘야 한다. reflection할 때 어노테이션에 들어 있는 이름을 통해서 파싱한 데이터들을 적절한 순서로 넣어줘야 하기 때문이다.

'기초튼튼 > JAVA' 카테고리의 다른 글

컬렉션 프레임웍  (0) 2019.07.05
java.lang 패키지(StringBuffer클래스)  (0) 2019.07.05
java.lang 패키지(String클래스)  (0) 2019.07.05
java.lang 패키지(Object클래스)  (0) 2019.07.04
예외처리  (0) 2019.07.04