ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 직렬화 vs 역직렬화
    Java/Basics 2019. 6. 14. 14:23


    ■직렬화란?


    - 객체를 파일로 저장하거나 네트워크를 통하여 다른 곳으로 전송하려면, 객체를 바이트 

    형태로 일일이 분해해야함. 이 작업을 '직렬화' 라고 한다.


    - 다시말해, 데이터를 연속적인 데이터로 변형하여 객체를 전송 가능한 형태로 만드는 

    것이다.


    - 사용 예 : RMI, BEAN 생성 등




    ■Serializable Interface


    - Serializable 인터페이스를 구현하면, JVM은 해당 클래스가 직렬화의 대상이라는 

    것을 인지하게 됨.


    - 타 인터페이스와 달리 구현해야 할 메소드가 없음. 단지 선언만 해두면 끝!!


    - 생성자, 메소드, 클래스변수를 제외한 '멤버변수'만이 직렬화 대상


    - 멤버변수에 transient 제어자를 붙이면 직렬화의 대상에서 제외


    - 멤버변수에 Serializable을 구현하지 않은 클래스가 있는 클래스는 직렬화 불가능.


    - 동일한 타입의 다수 객체를 직렬화하게 되는 경우, list를 사용하여 직렬화하는 것이 좋음

    (직렬화나 역직렬화 할 때, 순서가 적용되기 때문)



    ■SerialVersionUID


    - 직렬화를 하게 되면, 클래스(?) 내부에서 자동으로 SerialVersionUID라는 고유의 번호가 

    생성됨.


    - 역직렬화를 할 때, 이 값이 맞지 않는다면 InvalidClassException이 발생함.


    - 컴파일하고 배포될 때마다 이 ID는 계속 변경될텐데, 매번 Exception 처리를 하기가 

    번거로움. 때문에 Java에서는 클래스 내에 SerialVersionUID를 직접 선언하는 방식을 

    적극 권장(private static final long serialVersionUID = 1L;)



    ■역직렬화란?


    - 직렬화된 객체를 역으로 직렬화하여 다시 객체 본래의 형태로 만드는 것






    https://devbox.tistory.com/entry/Java-%EC%A7%81%EB%A0%AC%ED%99%94


    https://wickedmagic.tistory.com/279


    https://flowarc.tistory.com/entry/Java-%EA%B0%9D%EC%B2%B4-%EC%A7%81%EB%A0%AC%ED%99%94Serialization-%EC%99%80-%EC%97%AD%EC%A7%81%EB%A0%AC%ED%99%94Deserialization

    'Java > Basics' 카테고리의 다른 글

    vm args vs prog args  (0) 2020.01.10
    인터페이스 vs 추상클래스  (0) 2019.06.20
    Java의 날짜와 시간 API  (0) 2019.06.06
    자바 빌드 툴  (0) 2019.05.21
    자바 메모리 구조(Runtime Data Area)  (2) 2019.05.16

    댓글

Designed by Tistory.