티스토리 뷰

반응형

이에 대한 글을 쓰게 된 이유...

Activity간의 객체를 전달하는데 사용되는 기술이 Serializable과 Parcelable이 있고, 웹개발할 때 사용했던 Serializable을 사용했었다. Parcelable은 안드로이드 앱 개발 중에 처음 들어봤고, 처음 접했으니 Serializable보다 어렵게 느껴졌기 때문에 계속해서 Serializable을 사용했었다. 

그런데...  면접 보면서 Parcelable의 사용여부를 물어봤었다. 음... 안쓰더라도 알아야겠다고 생각했고, 오늘 앱 고도화를 진행하면서 제대로 확인하고 더 좋은 것을 사용해보자! 라는 생각에 Serialiable과 Parcelable의 특징을 찾아보기로 했다. 

이 내용은 이 둘의 특징에 대한 것이다.

 

Serialization(직렬화) 

: 컴퓨터과학의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정 ( 일련의 바이트로부터 데이터 구조를 추출 : 역직렬화 )- wiki https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94  

 

 

Serializable

: java 시스템에서는 객체를 동일한 또는 다른 java 시스템에 데이터를 전달하기 위해 해당 객체를 바이트 형태로 변환하는 기술을 의미한다.

: JVM 내에서 제공해주는 기술이기 때문에 간단하게 개발자가 객체에 대한 implements 만 해주면 쉽게 사용 가능하다. 

: 개발자가 직접 Serializable에 대한 추가적인 직렬화 방법을 기술하지 않으면, reflection을 이용하여 직렬화된 데이터를 객체로 변환하므로, 이 과정에서 추가 객체를 많이 사용하게 되고, 이렇게 생성된 쓰레기는 GC의 처리 대상이 되어, GC의 과도한 동작으로 성능 저하 및 배터리 소모를 일으킨다.

 

Parcelable 

: JVM이 아닌 안드로이드에서 제공하는 직렬화 기술이다. 

: reflection을 사용하지 않고 직렬화된 데이터를 객체로 변환하는 기술이기 때문에, reflection을 적용하지 않은 일반적인 Serializable 이용 시, 성능 측면에서 Serializable보다 높다.

: Parcelable을 사용하기 위해서는 개발자가 직접 직렬화에 대한 처리 방법을 기술해야 하기 때문에, 보일러플레이트가 발생하는 단점이 있다. (즉, 유지 보수에 어려움이 있다.)

 

 

* reflection 

: JVM에서 실행되고 있는 어플리케이션에서 런타임 시에 실행중인 객체에 대한 타입을 확인 및 수정이 가능하도록 하는 API

 

 

- Serializable & Parelable 

http://www.developerphil.com/parcelable-vs-serializable/

https://woowabros.github.io/experience/2017/10/17/java-serialize.html

https://medium.com/@limgyumin/parcelable-vs-serializable-%EC%A0%95%EB%A7%90-serializable%EC%9D%80-%EB%8A%90%EB%A6%B4%EA%B9%8C-bc2b9a7ba810

- 리플렉션

https://brunch.co.kr/@kd4/8

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
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
글 보관함