자바에 객체를 저장하는 방법으로 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)
대학원생의 투고 지도 ④ (완결) — 논문의 수준이란 무엇인가: 사다리와 사분위, 첫 논문 전략
완결편이다. "논문 수준"이라는 말을 해부하고, 에듀테크 석사생의 첫 논문 전략으로 마친다. 학위논문과 학술지 논문은 다른 장르다 먼저 가장 흔한 혼동부터. 학위논문(thesis)은 "내가 연구를 수행할 줄 안다...
-
오늘 테스트 해보고 포스팅 한다. 인터넷을 통해서 현대 오토넷 리얼뷰를 구입했다. 인터넷 보니 천차만별이던데 기본 25만원 하더라. 그런데 2가지가 있었다. 고급형은 HD에 2채널 25만원. 내가 산건 HD 아니고 1채널이...
-
프루나는 이제 믿을만한 공유가 안되고 있다. 젠장. 영화 다운 받아보면 전부 야동이나 포르노류 밖에는 없다. 신고되어 있는 자료부터 보지만 신고가 안되어 있는 것은 제대로 다운도 되지 않는다. 이젠 유료 사이트를 믿을 수 밖엔... ...
-
소스는 쉬어 가는 페이지 인가... SELinux에서 SEAndroid가 나왔다. 둘다 NSA 프로젝트이고. 이미 여러 패키지에 흩어져서 사용되고 있다. policycoreutils는 tresys에서 만든 것으로 보인다. ...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.