반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[Android] 직렬화 Serialization 본문
반응형
직렬화 Serialization
- 객체를 Byte Stream으로 변환하는 프로세스를 의미
- 변환된 데이터는 파일에 저장하거나 네트워크를 통해 전송 가능
- 직렬화를 통해 객체를 전송하거나 저장할 때 유용하게 사용 가능
- 역직렬화는 반대로 바이트 스트림을 다시 객체로 변환하는 프로세스이다.
Bite Stream
- 바이트 단위로 전송하는 입출력 스트림
- 특정 문자 인코딩과 무관하게 데이터를 전송 가능하여 텍스트 파일, 바이너리 파일 등 여러 종류의 파일을 처리하는 데에 유용
- 자바에서의 바이트 스트림을 다루기 위한 기본 클래스 : InputStream, OutputStream
객체를 직렬화 하기 위한 Interface
- Parcelable와 Serializable를 동시에 사용 불가능: 클래스가 Parcelable로 구현되면 Serializable을 함께 사용할 수 없다. Parcelable로 충분하다면 Parcelable를 사용하는 것이 좋다.
Serializable
- java.io.Serializable
- 객체 자체를 전달할 때는 Serializable을 사용해도 되지만 객체 리스트를 지원하지 않기 때문에 객체 리스트 전달 시 Parcelable을 사용해야 한다.
- Reflection 사용: 객체를 직렬화하고 역직렬화할 때 리플렉션(reflection)을 사용하므로 런타임 시 성능이 일부 영향을 받을 수 있다.
- Reflection : 자신의 구조를 동적으로 조사하고 수정할 수 있는 메서드의 종합체 (생성자, get, set 메서드 등으로 이루어져 있다.)
- 클래스의 정보 얻기: 클래스의 이름, 메서드, 필드, 생성자 등의 정보를 얻기 가능
- 인스턴스 생성 및 메서드 호출: 클래스의 인스턴스를 동적으로 생성하거나 메서드를 호출 가능
- 필드 값 읽기 및 쓰기: 클래스의 필드에 저장된 값을 읽거나 수정 가능
- 어노테이션 처리: 클래스, 메서드, 필드 등에 부여된 어노테이션을 읽고 처리
- Reflection : 자신의 구조를 동적으로 조사하고 수정할 수 있는 메서드의 종합체 (생성자, get, set 메서드 등으로 이루어져 있다.)
- @Serializable 사용 시 자동으로 관련 메서드를 implementaion 할 수 있다.
@Serializable data class Person( val name: String, val age: Int, ) : Serializable
Parcelable
- Parcel : 안드로이드에서 객체를 직렬화하고 전달하는 데 사용되는 클래스
- 안드로이드에서는 Parcelable을 선호하고 성능상의 이점이 있다
- 객체가 자주 전달되는 경우 Parcelable을 사용
- 직렬화 및 역직렬화를 위해 Reflection이 아닌 명시적인(추상화 하지 않은) 코드를 사용하기 때문에 성능이 향상
- @Parcelable 사용 시 자동으로 관련 메서드를 implementaion 할 수 있다. (writeToParcel(), createFromParcel())
- writeToParcel() : 객체를 Parcel에 쓰는 역할. 해당 메서드를 통해 객체의 필드들을 Parcel에 저장
- createFromParcel() : Parcel에서 객체를 생성하는 역할
@Parcelable data class Person( val name: String, val age: Int, ) : Parcelable
'Android' 카테고리의 다른 글
[Android] Android Studio Clean Build 자동화 방법 (1) | 2024.09.05 |
---|---|
[Android] Navigation에서의 back stack 관리 (0) | 2023.12.26 |
[Android] bottomsheet 완전히 펼쳐지게 하기 (0) | 2023.12.18 |
[Android] 키보드에 요소 가려지는 현상 해결 (0) | 2023.12.17 |
[Android] Retrofit 서버 통신 값 null로 올 시 처리 (0) | 2023.12.17 |