<div>Do it 안드로이드 앱 프로그래밍 책을 보면서 공부중인데요</div> <div><br></div>MainActivity.java 에서는 객체를 인텐트로 전달하기 위해서 <div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"><span style="color:#cc7832;">public static final </span>String <span style="color:#9876aa;font-style:italic;">KEY_SIMPLE_DATA </span>= <span style="color:#6a8759;">"data"</span><span style="color:#cc7832;">;</span></pre><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"></pre><pre style="font-family:Verdana;font-size:9pt;"><span style="background-color:#344134;">SimpleData</span> data = <span style="color:#cc7832;">new </span><span style="background-color:#344134;">SimpleData</span>(<span style="color:#6897bb;">100</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">"Hello Android!"</span>)<span style="color:#cc7832;">;<br></span>intent.putExtra(<span style="color:#9876aa;font-style:italic;">KEY_SIMPLE_DATA</span><span style="color:#cc7832;">, </span>data)<span style="color:#cc7832;">;</span></pre>이렇게 선언했고</div> <div><br></div> <div>전달될 SimpleData.java는</div> <div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"><span style="color:#cc7832;">public class </span>SimpleData <span style="color:#cc7832;">implements </span>Parcelable {</pre></div> <div>매개변수 2개를 받아 변수를 초기화하는 생성자와</div> <div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"><span style="color:#808080;">// </span><span style="color:#808080;font-family:'굴림체';">숫자 데이터<br></span><span style="color:#cc7832;">int </span><span style="color:#9876aa;">number</span><span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"><br></span><span style="color:#808080;">// </span><span style="color:#808080;font-family:'굴림체';">문자열 데이터<br></span>String <span style="color:#9876aa;">message</span><span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"><br></span><span style="color:#629755;font-style:italic;">/**<br></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-style:italic;font-family:'굴림체';">데이터 </span><span style="color:#629755;font-style:italic;">2</span><span style="color:#629755;font-style:italic;font-family:'굴림체';">개를 이용하여 초기화하는 생성자<br></span><span style="color:#629755;font-style:italic;font-family:'굴림체';"> </span><span style="color:#629755;font-style:italic;">* <br></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">num<br></span><span style="color:#8a653b;font-style:italic;"> </span><span style="color:#629755;font-style:italic;">* </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">msg<br></span><span style="color:#8a653b;font-style:italic;"> </span><span style="color:#629755;font-style:italic;">*/<br></span><span style="color:#cc7832;">public </span><span style="color:#ffc66d;">SimpleData</span>(<span style="color:#cc7832;">int </span>num<span style="color:#cc7832;">, </span>String msg) {<br> Log.<span style="font-style:italic;">d</span>(<span style="color:#6a8759;">"SimpleData</span><span style="color:#6a8759;font-family:'굴림체';">클래스</span><span style="color:#6a8759;">"</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">"SimpleData() </span><span style="color:#6a8759;font-family:'굴림체';">데이터</span><span style="color:#6a8759;"> 2</span><span style="color:#6a8759;font-family:'굴림체';">개 초기화 생성자 실행</span><span style="color:#6a8759;">"</span>)<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span><span style="color:#9876aa;">number </span>= num<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span><span style="color:#9876aa;">message </span>= msg<span style="color:#cc7832;">;<br></span>}</pre></div> <div><br></div>이렇게 Parcelable 인터페이스를 상속받아서 <div><br><div>Parcel객체를 이용해 초기화하는 생성자 그리고</div> <div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"><span style="color:#629755;font-style:italic;">/**<br></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-style:italic;font-family:'굴림체';">다른 </span><span style="color:#629755;font-style:italic;">Parcel </span><span style="color:#629755;font-style:italic;font-family:'굴림체';">객체를 이용해 초기화하는 생성자<br></span><span style="color:#629755;font-style:italic;font-family:'굴림체';"> </span><span style="color:#629755;font-style:italic;">* <br></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-weight:bold;font-style:italic;">@param </span><span style="color:#8a653b;font-style:italic;">src<br></span><span style="color:#8a653b;font-style:italic;"> </span><span style="color:#629755;font-style:italic;">*/<br></span><span style="color:#cc7832;">public </span><span style="color:#ffc66d;">SimpleData</span>(Parcel src) {<br> Log.<span style="font-style:italic;">d</span>(<span style="color:#6a8759;">"SimpleData</span><span style="color:#6a8759;font-family:'굴림체';">클래스</span><span style="color:#6a8759;">"</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">"SimpleData() Parcel</span><span style="color:#6a8759;font-family:'굴림체';">객체 초기화 생성자 실행</span><span style="color:#6a8759;">"</span>)<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span><span style="color:#9876aa;">number </span>= src.readInt()<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span><span style="color:#9876aa;">message </span>= src.readString()<span style="color:#cc7832;">;<br></span>}</pre></div> <div>정의된 메소드를 2개를 작성해주고</div> <div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"><span style="color:#cc7832;">public int </span><span style="color:#ffc66d;">describeContents</span>() {<br> Log.<span style="font-style:italic;">d</span>(<span style="color:#6a8759;">"SimpleData</span><span style="color:#6a8759;font-family:'굴림체';">클래스</span><span style="color:#6a8759;">"</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">"descriibeContents() </span><span style="color:#6a8759;font-family:'굴림체';">실행</span><span style="color:#6a8759;">"</span>)<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> return </span><span style="color:#6897bb;">0</span><span style="color:#cc7832;">;<br></span>}</pre><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"></pre><pre style="font-family:Verdana;font-size:9pt;"><span style="color:#629755;font-style:italic;">/**<br></span><span style="color:#629755;font-style:italic;"> * </span><span style="color:#629755;font-style:italic;font-family:'굴림체';">데이터를 </span><span style="color:#629755;font-style:italic;">Parcel </span><span style="color:#629755;font-style:italic;font-family:'굴림체';">객체로 쓰기<br></span><span style="color:#629755;font-style:italic;font-family:'굴림체';"> </span><span style="color:#629755;font-style:italic;">*/<br></span><span style="color:#cc7832;">public void </span><span style="color:#ffc66d;">writeToParcel</span>(Parcel dest<span style="color:#cc7832;">, int </span>flags) {<br> Log.<span style="font-style:italic;">d</span>(<span style="color:#6a8759;">"SimpleData</span><span style="color:#6a8759;font-family:'굴림체';">클래스</span><span style="color:#6a8759;">"</span><span style="color:#cc7832;">, </span><span style="color:#6a8759;">"writeToParcel() </span><span style="color:#6a8759;font-family:'굴림체';">실행</span><span style="color:#6a8759;">"</span>)<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span>dest.writeInt(<span style="color:#9876aa;">number</span>)<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span>dest.writeString(<span style="color:#9876aa;">message</span>)<span style="color:#cc7832;">;<br></span>}</pre>내부 CREATOR 객체생성을 위해 <div><pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:Verdana;font-size:9pt;"><span style="color:#cc7832;">public static final </span>Creator <span style="color:#9876aa;font-style:italic;">CREATOR </span>= <span style="color:#cc7832;">new </span>Creator() {<br><br><span style="color:#cc7832;">public </span>SimpleData <span style="color:#ffc66d;">createFromParcel</span>(Parcel in) {<br><span style="color:#cc7832;">return new </span>SimpleData(in)<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span>}<br><br><span style="color:#cc7832;">public </span>SimpleData[] <span style="color:#ffc66d;">newArray</span>(<span style="color:#cc7832;">int </span>size) {<br><span style="color:#cc7832;">return new </span>SimpleData[size]<span style="color:#cc7832;">;<br></span><span style="color:#cc7832;"> </span>}<br><br>}<span style="color:#cc7832;">;</span></pre></div>이렇게 작성된 상태인데요 <div><br><div>실행은 정상적으로 되는데</div> <div>로그를 찍어보니까</div> <div>실행순서가</div> <div><br></div></div></div></div> <div>1. SimpleData() 데이터 2개 초기화 생성자 실행</div> <div>2. writeToParcel() 실행</div> <div>3. createFromParcel() 실행</div> <div>4. SimpleData() Parcel객체 초기화 생성자 실행</div> <div><br></div> <div>이렇게 처리가 되는데</div> <div>1번이야 MainActivity.java에서 매개변수 2개로 new를 했으니까 실행되는건 아는데</div> <div>나머지 2,3,4는 따로 호출한 부분은 없는데 왜 실행되는지 책을봐도 이해가 잘안가네요</div> <div>알려주시면 감사하겠습니다</div>
<img src="http://t1.daumcdn.net/thumb/R1024x0/?fname=http://cfile10.uf.tistory.com/image/231FE433598093512DCA8C" alt="231FE433598093512DCA8C"><img_ src="http://t1.daumcdn.net/thumb/R1024x0/?fname=http://cfile28.uf.tistory.com/image/273EC733598092251261F6" alt="273EC733598092251261F6"><img_ src="http://t1.daumcdn.net/thumb/R1024x0/?fname=http://cfile27.uf.tistory.com/image/24582133598092330EDDA8" alt="24582133598092330EDDA8"><img_ src="http://t1.daumcdn.net/thumb/R1024x0/?fname=http://cfile6.uf.tistory.com/image/26BB7C335980924509D38E" alt="26BB7C335980924509D38E"><img_ src="http://t1.daumcdn.net/thumb/R1024x0/?fname=http://cfile10.uf.tistory.com/image/213B0E335980923C133AD5" alt="213B0E335980923C133AD5"><img_ src="http://t1.daumcdn.net/thumb/R1024x0/?fname=http://cfile6.uf.tistory.com/image/215C243359809287209F65" alt="215C243359809287209F65">
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.