개발일지

[면접] 직렬화(Serialization) 본문

면접/Java

[면접] 직렬화(Serialization)

딸기아사이레모네이드리프레셔 2024. 3. 1. 16:24
728x90

목차

    💡 직렬화


    자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술

    각 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달할 수 없다. 

    이런 문제를 해결하기 위해선 주소값이 아닌, Byte 형태로 직렬화된 객체 데이터를 전달해야 한다.

    직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서 전송 및 저장이 가능 데이터로 만들어 주는 것이 바로 직렬화라고 할 수 있다. 

    💡 직렬화 조건


    자바에서는 간단히 java.io.Serializable 인터페이스 구현으로 직렬화/역직렬화가 가능하다.

    직렬화 대상 : 인터페이스를 상속 받은 객체, Primitive 타입의 데이터

    Reference 타입처럼 주소값을 지닌 객체들은 바이트로 변환하기 위해 Serializable 인터페이스를 구현해야 한다. 

    💡 serialVersionUID


    serialVersionUID는 자바 직렬화 프로세스에서 사용되는 정적 상수이다. 이 값은 Serializable 인터페이스를 구현한 클래스의 버전을 식별하는 역할을 한다. 

    serialVersionUID는 선언하지 않아도 자동으로 해시값이 해당된다. 하지만, 기존의 클래스 멤버 변수가 변경되면 serialVersionUID가 달라지는데 역직렬화 시 달라진 넘버로 Exception이 발생될 수 있다. 따라서 serialVersionUID을 관리해야 클래스의 변수가 변경되어도 직렬화에 문제가 발생하지 않게 된다. 

     

    #외부의 자바 시스템에서도 사용 #객체 또는 데이터를 바이트 형태로 데이터를 변환하는 기술 #serialVersionUID관리

    728x90

    '면접 > Java' 카테고리의 다른 글

    [면접] 얕은 복사와 깊은 복사  (0) 2024.02.29
    [면접] Wrapper Class  (0) 2024.02.29
    [면접] Final keyword 와 Access Modifier  (0) 2024.02.28
    [면접] Annotation과 Generic이란?  (0) 2024.02.27
    [면접]Java의 Collection Framework  (1) 2024.02.26
    Comments