본문 바로가기
개발/java,spring,springboot

java 직렬화

by 개발자종혁 2021. 11. 12.
728x90

직렬화란?

- 객체를 다른 환경에 저장했다가 나중에 재구성 할 수 있게 만드는 방식

- object는 주소를 통해 reference 되기 때문에, 이미 가비지 컬렉터로 지워졌다면 그게 무슨 값인지 알수 없다. 따라서 byte로 직렬화하여 값을 유지하여 그대로 저장하고, 그것을 역직렬화하는 방식이다. (object를 byte로, byte를 object로)

 

자바 직렬화

- 쉬운 분산 객체생성

- byte stream을 만듦

 

언제 쓸까?

- 객체의 상태를 저장해야 할필요가 있을 때 - 파일, dB, 캐시

- 다른 vm에 정보를 전달할 필요가 있을 때 - RMI, 소켓

 

사용방법

- Serializable

- 객체 직렬화: java.io.ObjectOutputStream의 writeObject를 이용  - ByteArrayOutputStream.toByteArrayStream()

- 객체 역직렬화 : java.io.ObjectInputStream 의 readObject를 이용

 

직렬화 역직렬화 흐름

 - Object -> writeObject -> (저장: DB, file, memory) -> readObject -> readResolve -> Object

 

잘 안쓰는 이유

- 보안

- 유지보수성

- 테스트

  - 그외 : 싱글톤, 역직렬화 문제

- 문제를 해결하는 방식은 있지만 사실 굳이 복잡하게 할이유가 없다.

 

좋은 방법은  직렬화를 사용하지 않는 것이다.

- 새로운 시스템에 바이트 스트림으로 변환하는 좋은 메커니즘이 많음.

- 크로스 플랫폼에 적합한 데이터 표현

  - json, csv, 프로토콜 버퍼

 

[10분 테코톡] 🍄비밥의 자바 직렬화 - YouTube

728x90

댓글