자바에 객체를 저장하는 방법으로 serializable이 있다. 그와 같이 안드로이드에도 parcelable이 있더라.
사실 의미상 parcel이 패키지니까 +able(할수있다)를 붙여서 parcelable이 더 맞는 표현 인 것 같다.
안드로이드 UI 표현의 hierachy상 객체끼리 이래저래 자료를 주고 받기 힘든 부분이 있을거라고 생각했다. serialize로 해서 되는 구문도 있긴 하더라. Bundle에서 put어쩌구 시리얼 어쩌구 함수가 있는데 이 함수는 시리얼 객체를 저장할수도 있고 실재 에러도 안났다.
꺼내보지는 않았지만.
그리고 parcelable이 안드로이드에 더 적합한 이유는 구현이 복잡하기 때문이다. 그 복잡의 정도는 일일이 넣을 멤버 변수들을 지정해줘야 하는데 있다. 사실 씨리얼라이저블도 객체의 인스턴스(C++에서는 객체의 포인터)를 저장해 놓는 정도 밖에 안된다.
new가 malloc이니까 new해서 메모리에 생성된 객체의 주소만 알 수 있으면 그게 바로 저장의 의미일거다. -> 사실 내 입장에서는 자바의 객체들이 포인터로 밖에는 안보인다. 그래도 컴언어만 20년 넘게 했으니까.
이래저래 찾다보니 국내 블로그에서는 parcelable을 사용한 분들이 string, int 형 그리고 inner class의 class type으로 저장한 분도 계셨다. 하지만 뭔가 부족해 보였다. 자유롭게 전달하려면 void 포인터가 필요하고 거기에 걸맞는 자바 객체는 Object인데 Object 타입으로 주고 받을 수는 없을 것인가?
dest.writeString(imgData);
dest.writeString(geoData);
dest.writeInt(selectedItem);
dest.writeParcelable(imageViewer, 0);
이렇게 구현을 하다보니 string이나 int, array등 기본타입은 문제가 안되는데... 결국 사용자 정의 객체가 문제였다. 그리고 사용자 정의 객체를 저렇게 parcelable로 한다고 해도 그 parcelable에서 또 그 멤버변수를 string이나 int등으로 밖에 쓸 수가 없었다.
메써드를 찾다보니
dest.writeValue(Object v)
가 있더라. 아... 오브젝트 타입으로 보낼수도 있구나. 결국 저게 void point로 보였고, 받는 쪽에서 캐스팅만 잘하면 쓸 수 있다는 희망이 보였다.
하지만 String Array 객체를 저장하려고 열심히 연구중이었는데
dest.writeStringList(thumbsIDList);
가 있다는 걸 알고 한심스러움을 뒤로 하고 fin.
피드 구독하기:
댓글 (Atom)
UPBIT is a South Korean company, and people died of suicide cause of coin investment.
UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...
-
프루나는 이제 믿을만한 공유가 안되고 있다. 젠장. 영화 다운 받아보면 전부 야동이나 포르노류 밖에는 없다. 신고되어 있는 자료부터 보지만 신고가 안되어 있는 것은 제대로 다운도 되지 않는다. 이젠 유료 사이트를 믿을 수 밖엔... ...
-
Intel의 새로운 MMX - "KNI" KNI 는 Katmai New Instruction 의 약자이다 . 아는 분들은 잘 알고있겠지만 KATMAI( 이하 카트마이로 부름 ) 는 인텔의 다음번 펜티엄...
-
C:\program files\ 베이비론 폴더가 있다. 브라우저 창 다닫고 지우고 다시 실행하면 없어진다.
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.