Android Parcelable

passΒ·2023λ…„ 6μ›” 18일
0

Android

λͺ©λ‘ 보기
14/41

πŸ”₯ Android Parcelable 을 μ‚¬μš©ν•˜μ—¬ Intent 둜 객체 μ „λ‹¬ν•˜κΈ°

🎈 Android μ—μ„œ Intent λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ „λ‹¬ν•˜κ³ μž ν•  λ•Œ, 객체둜 전달해야 ν•  κ²½μš°κ°€ μžˆλ‹€. 이 λ•Œ λŒ€ν‘œμ μΈ 방법이 Serializable κ³Ό Parcelable 을 μ‚¬μš©ν•˜λŠ” 방법인데, 이 쀑 Parcelable 에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.


Serializable μ΄λž€ μ˜μ–΄λ‘œ λ²ˆμ—­ν•˜λ©΄ '직렬화' 라고 이야기할 수 μžˆλŠ”λ°, μ‰½κ²Œ μ΄μ•ΌκΈ°ν•˜λ©΄ 데이터λ₯Ό λ¬Άμ–΄μ„œ 전달할 수 있게 ν•΄μ€€λ‹€κ³  λ³Ό 수 μžˆλ‹€.
java μ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” Serializable 은 κ΅¬ν˜„ν•΄μ•Όν•  λ©”μ†Œλ“œκ°€ μ—†μ–΄ νŽΈλ¦¬ν•˜λ‹€.

λ˜λ‹€λ₯Έ μ‚¬μš©λ²•μœΌλ‘œλŠ” Android Parcelable μžˆλ‹€.
Parcelable 을 μ˜μ–΄λ‘œ λ²ˆμ—­ν•˜λ©΄ 'μ†Œν¬ κ°€λŠ₯' 이라고 말할 수 있고, 이것 μ—­μ‹œ μ—¬λŸ¬ 데이터λ₯Ό λ‹΄μ•„ μ „λ‹¬ν•œλ‹€κ³  λ³Ό 수 μžˆλ‹€.
Parcelable 은 직렬화와 역직렬화λ₯Ό 직접 κ΅¬ν˜„ν•΄μ•Όν•œλ‹€λŠ” 단점이 μžˆμ§€λ§Œ, 속도가 훨씬 λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆμ–΄ Parcelable 을 μ‚¬μš©ν•˜μ˜€λ‹€.



βœ” data class 생성

public class TestInfo implements Parcelable {
    int id;
    String name;
    String testNumber;


    public TestInfo(String name, String testNumber) {
        this.name = name;
        this.testNumber = testNumber;
    }
}
  • 데이터 클래슀λ₯Ό μƒμ„±ν•œ ν›„ Parcelable 을 implements ν•΄μ€€λ‹€.
  • 이후 빨간쀄이 뜨면 Alt + Enter λ₯Ό 눌러 Add Parcelable implementation λ₯Ό μ‹€ν–‰ν•œλ‹€.



βœ” Parcelable implement

public class TestInfo implements Parcelable {
    int id;
    String name;
    String testNumber;


    public TestInfo(int id, String name, String testNumber) {
        this.id = id;
        this.name = name;
        this.testNumber = testNumber;
    }

    protected TestInfo(Parcel in) {
        id = in.readInt();
        name = in.readString();
        testNumber = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
        dest.writeString(testNumber);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<TestInfo> CREATOR = new Creator<TestInfo>() {
        @Override
        public TestInfo createFromParcel(Parcel in) {
            return new TestInfo(in);
        }

        @Override
        public TestInfo[] newArray(int size) {
            return new TestInfo[size];
        }
    };
}
  • κ°€μž₯ μ€‘μš”ν•œ 뢀뢄은 Creator 뢀뢄인데, 이 뢀뢄이 Parcelable μ—μ„œ ν•„μˆ˜μ μΈ non-null static ν•„λ“œμ΄λ‹€.
  • Creator 와 Override 된 λ©”μ†Œλ“œλ“€μ€ Android Studio μ—μ„œ μžλ™μ μœΌλ‘œ 생성을 도와주기 λ•Œλ¬Έμ— λ³΅μž‘ν•˜μ§€λ§Œ, 어렡지 μ•Šκ²Œ 진행할 수 μžˆλ‹€.
  • 직렬화
    • writeToParcel() : Parcel 객체에 데이터 μ €μž₯
  • 역직렬화
    • createFromParcel() : Parcel λ‘œλΆ€ν„° μ›λž˜ 객체 λͺ¨μ–‘μ˜ 따라 데이터 볡원



βœ” Intent 둜 데이터 전솑

TestInfo testInfo = new TestInfo(1, "test1", 1);

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("testInfo", testInfo);



βœ” Intent 둜 데이터 λ°›κΈ°

TestInfo testInfo = getIntent().getParcelableExtra("testInfo");
profile
μ•ˆλ“œλ‘œμ΄λ“œ 개발자 지망생

0개의 λŒ“κΈ€