일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 면접
- 스프링 MVC
- 정처기
- 쿼리dsl
- 자바
- JPA
- 자바의 정석
- 스파르타코딩
- 코딩테스트
- 객체지향프로그래밍
- 스프링
- db
- 백준
- 자료구조
- 브루트 포스
- 메서드
- 운영체제
- 네트워크
- 반복문
- Java
- programmers
- ModelAttribute
- OS
- 알고리즘
- 스프링MVC
- Bean Validation
- 코테
- 프로그래머스
- 검증
- 웹개발
- Today
- Total
개발일지
[면접] 직렬화(Serialization) 본문
목차
💡 직렬화
자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술
각 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 갖기 때문에, Reference Type의 데이터들은 인스턴스를 전달할 수 없다.
이런 문제를 해결하기 위해선 주소값이 아닌, Byte 형태로 직렬화된 객체 데이터를 전달해야 한다.
직렬화된 데이터들은 모두 Primitive Type(기본형)이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 된다. 따라서 전송 및 저장이 가능 데이터로 만들어 주는 것이 바로 직렬화라고 할 수 있다.
💡 직렬화 조건
자바에서는 간단히 java.io.Serializable 인터페이스 구현으로 직렬화/역직렬화가 가능하다.
직렬화 대상 : 인터페이스를 상속 받은 객체, Primitive 타입의 데이터
Reference 타입처럼 주소값을 지닌 객체들은 바이트로 변환하기 위해 Serializable 인터페이스를 구현해야 한다.
💡 serialVersionUID
serialVersionUID는 자바 직렬화 프로세스에서 사용되는 정적 상수이다. 이 값은 Serializable 인터페이스를 구현한 클래스의 버전을 식별하는 역할을 한다.
serialVersionUID는 선언하지 않아도 자동으로 해시값이 해당된다. 하지만, 기존의 클래스 멤버 변수가 변경되면 serialVersionUID가 달라지는데 역직렬화 시 달라진 넘버로 Exception이 발생될 수 있다. 따라서 serialVersionUID을 관리해야 클래스의 변수가 변경되어도 직렬화에 문제가 발생하지 않게 된다.
#외부의 자바 시스템에서도 사용 #객체 또는 데이터를 바이트 형태로 데이터를 변환하는 기술 #serialVersionUID관리
'면접 > 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 |