안드로이드 직렬화 질문입니다! Android Serializable

조회수 2276회

안녕하세요 안드로이드를 공부하다가 궁금한 것이 생겨 이렇게 질문 올리게 되었습니다.

갑자기 제가 언젠가 봤던 객체의 직렬화를 통한 데이터의 전달이 퍼포먼스에 굉장히 않좋다는 YouTube를 보았던 것이 기억이나서 방금도 다시 보았는데요.

https://www.youtube.com/watch?v=IwxIIUypnTE&annotation_id=annotation_588829075&feature=iv&src_vid=qBxeHkvJoOQ

이 동영상을 보았습니다.

이 동영상을 보면 직렬화가 퍼포먼스에 않좋으니 다른 걸 사용하라고 추천을 해주는데, Gson, parcelable, sharedprefermance 등을 추천해주는 것을 보실수 있으실 겁니다.

여기서 제가 궁금한 것은

  1. 저 동영상에서 추천한 Gson이나, 다른 라이브러리들이 단순히 동일한 어플리케이션에서 두 개의 액티비티 사이에서 intent를 이용한 데이터 전달에도 사용할 수 있는지와, (MainAcitivity ---> SecondActivity)
  2. String 데이터 몇개가 전부인 객체를 전달할 때도 차이가 많이 나는지 입니다.

지금 연습용으로 만들고 있는 앱에는 그냥 serializable을 사용하고 있긴한데 사용 연습 겸, 공부하는 겸 해서 써볼까 합니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Intent로 Activity 사이에서 객체를 주고받고자 한다면, 해당 객체(클래스)를 수정하여 Parelable 인터페이스를 구현할 수 있다면, 이방법으로 하고, 그렇지 않다면, 차선으로 다른 방법을 생각해보는게 좋겠습니다.

    String 데이터 몇개라고 하더라도, Serializable이 갖는 동작 메커니즘에 의해서 메모리에 상당히 부담이 될 수 있습니다. 안드로이드 자바에서는 어떻게 처리하고 있는지 모르겠으나, 일반적으로 Serializable로 선언하게 되면, 자바는 해당 객체의 멤버들을 연속된 메모리 공간에 배치하려고 합니다. 큰 정크(객체)가 될 수록, JVM에서 메모리 관리에서 문제가 발생할 수 있습니다.

    참고

    Serializable 은 자바에서 실제 동작 메커니즘의 설명을 제외하면 메모리에 있는 개체를 네트워크,파일과 같은 형태의 I/O를 통해서 다른 시스템(자바머신)에 전달해야 하는 경우를 위해서 만든 인터페이스입니다. 일반적으로 Serializable 인터페이스를 상속만하면, 직렬화하는 과정은 JVM 에서 알아서 처리해줍니다만, 변환비용이 상당히 큽니다.

    Parcelable은 안드로이드의 자바에서 Activity간에 객체를 주고받을 때 Serializable을 대체하는 것으로 생각하시면 됩니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)