본문 바로가기

JAVA/Android

[JAVA][Android] Bundle로 클래스 객체 전달하기

이번 포스팅에서는 Bundle에 클래스 객체를 전달하는 방법에 대해 정리하겠다.

클래스 객체를 전달할 수 있다는 사실을 몰랐을 때에는
객체가 가지고있는 데이터 하나하나를 따로 저장하여 전달하다 보니
전달해야 하는 데이터가 많아져 곤란했었다.
클래스 객체를 전달하면 데이터 하나만 전달해도

받는 시점에 전달받은 데이터에서 값을 추출해서 사용할 수 있으니 훨씬 편리하다

방법은 쉽다.

/**수신*/
TestClass testClass;
testClass = (TestClass) bundle.getSerializable("TEST_CLASS_INSTANCE");

/**송신*/
Bundle bundle = new Bundle();
bundle.putSerializable("TEST_CLASS_INSTANCE", (Serializable) testClass);

송신할 때에는 bundle.putSerializable() 메소드를 통해 키 값과 함께 객체를 전달하면 된다.
객체 앞에 (Serializable)을 작성하여 직렬화 데이터로 캐스팅하고,
전달하려는 클래스에도 Serializable 인터페이스를 상속 받아야 한다.

 

수신 할 때에도 bundle.getSerializable()을 통해 키 값으로 해당 객체를 추출할 수 있다.
또한 메소드 앞에 해당 클래스로 캐스팅 해주어야 한다.

*추가로, 전달하려는 클래스 내부에 이너 클래스가 있다면,
 이너 클래스에도 Serializable 인터페이스를 상속받아야 하며
 생략할 경우에는 Runtime Exception이 발생할 수 있다.

 java.lang.RuntimeException: Parcelable encountered IOException writing serializable object

 

*Serializable 상속 예시

import java.io.Serializable;

/**Class에 Serializable 상속*/
public class TestClass implements Serializable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
/**Inner Class에도 Serializable 상속*/
    public class TestItem implements Serializable{
        private int testNo;

        public int getTestNo() {
            return testNo;
        }

        public void setTestNo(int testNo) {
            this.testNo = testNo;
        }
    }
    
}

 

*관련 내용은 아래 포스팅 참고

Serializable(데이터 직렬화)이란?

 

[JAVA][Android] 데이터 직렬화 (Serialize)

데이터 직렬화 (Serialize) *데이터 직렬화는  1. 객체를 저장하는 경우  2. 데이터를 DB에 올리는 경우  3. 파일을 작성하는 경우  4. 파싱할 데이터를 통신하는 경우 등 여러가지 케이스에 유의미

developer-jisu.tistory.com