직렬화/역직렬화

가언·2024년 7월 18일

spring

목록 보기
5/8

Message Convert

: 우리 대신 직렬화/역직렬화를 해주는 것

  • 객체-> json, String, csv: 직렬화
  • json, String, csv, 텍스트->객체: 역직렬화

직렬화vs역직렬화


  • 직렬화(Serialization)
    : 객체->텍스트(ex. csv, json...), 바이너리
    "자바에만 존재하는 것이 아니라 프로그램 세상의 이야기"
    • 자바 객체 -> json in 자바 세상
  • 역직렬화(De-Serialization) (ex. @RequestBody)
    : 텍스트, 바이너리 -> 객체
    • json -> 자바 객체 in 자바 세상
      cf. coupling vs decoupling (시스템, 프로그램)
  • decoupling: 하나로 된 것을 분리하는 것
  • coupling: 분리된 것을 하나로 만드는 것

자동적으로 스프링이 역직렬화와 직렬화를 해주는 걸까???

NO!내가 스프링한테 해달라고 요청하는 것!

내가..?

  • @RequestMapping, @RequestBody 어노테이션을 통해 스프링이 메시지 컨버터를 통해 역직렬화를 실행
  • @RestController(@ResponseBody가 포함)을 통해 직렬화가 실행
    (cf. 에노테이션의 영향력은 아래에 있는 범위까지(클래스, 메소드, 객체..)

그렇다면 위 로직은 어디 라이브러리에서 실행되는 걸까?

  • Jackson 라이브러리
    spring boot의 spring starter web에 꽁꽁 숨어있당!

직렬화/역직렬화가 이루어지기 위한 요구사항

  • 기본 생성자 (No-Args Constructor):
    Jackson은 역직렬화 시 객체를 생성하기 위해 기본 생성자를 사용한다. 따라서 클래스에는 인자가 없는 기본 생성자가 필요!

  • Getter 및 Setter 메서드:
    역직렬화 (Deserialization): JSON 데이터를 객체로 변환할 때, Jackson은 JSON 필드를 객체의 필드에 매핑하기 위해 Setter 메서드를 사용!
    직렬화 (Serialization): 객체를 JSON으로 변환할 때, Jackson은 객체의 필드를 JSON 필드로 변환하기 위해 Getter 메서드를 사용!

❣️post method의 경우에는 getter만 있어도 가능하다❣️

.
.
.

profile
@gari_guri

0개의 댓글