Android Studio

Serializable을 활용한 객체 전달 방법

ssury94 2025. 3. 10. 10:01

Serializable을 활용한 객체 전달

Android에서 두 개의 Activity 간에 데이터를 전달할 때, 단순한 데이터만 전달할 수 있는 Intent를 사용합니다.

Intent를 통해 객체를 전달하려면 객체를 Serializable 인터페이스를 구현하여 직렬화(Serialization)해야 합니다.

직렬화는 객체를 바이트 스트림으로 변환하여 다른 Activity로 전달하고, 그 후 다시 역직렬화(Deserialization)를 통해 원래의 객체로 복원하는 과정입니다.

Serializable 인터페이스란?

Serializable 인터페이스는 자바에서 제공하는 내장 인터페이스로, 객체를 바이트 스트림으로 변환하여 쉽게 저장하거나 전송할 수 있게 도와줍니다. 이 인터페이스를 구현한 클래스의 객체는 Intent를 통해 다른 Activity로 전달할 수 있습니다.

1. 객체를 Serializable로 만들기

먼저, 전달하려는 객체가 Serializable 인터페이스를 구현해야 합니다. 예를 들어 Memo 객체를 전달한다고 가정하면, Memo 클래스는 Serializable 인터페이스를 구현해야 합니다.

 

Memo
import java.io.Serializable;

public class Memo implements Serializable {
    private long id;
    private String title;
    private String content;
    private String memoDate;

    // 생성자, getter, setter 등
}

위 코드에서 Memo 클래스는 Serializable을 구현하고 있기 때문에, 해당 객체는 Intent를 통해 전달할 수 있습니다.

 

 

 

2. 객체 전달하기

객체를 Intent로 전달할 때는 putExtra() 메서드를 사용합니다. putExtra() 메서드는 Intent에 데이터를 추가하는 역할을 합니다.

객체를 전달할 때는 putExtra()에 객체를 Serializable로 전달하면 됩니다.

 

MemoAdapter
            //카드뷰 클릭시
            cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int index=getAdapterPosition();
                    Memo memo=memoArrayList.get(index);
                    Long memoId=memo.id;
                    Intent intent = new Intent(context, UpdateActivity.class);
                    intent.putExtra("memo",memo);
                    intent.putExtra("index",index);
                    intent.putExtra("memoId",memoId);
                    //startActivity(intent); 없다.
                    //startActivity는 액티비티에서만 사용가능
                    //context.startActivity(intent); //이렇게 사용해야함
                    context.startActivity(intent);
                    }
            });
        }

3. 전달된 객체 받기

전달된 객체를 받는 쪽에서는 getSerializableExtra() 메서드를 사용하여 객체를 추출할 수 있습니다. 이때, Serializable 타입으로 반환되므로 이를 원하는 타입으로 캐스팅해야 합니다.

 

UpdateActivity
Memo memo = (Memo) getIntent().getSerializableExtra("memo");  // "memo" 키로 전달된 객체를 받기
if (memo != null) {
    // 객체 사용
    String title = memo.getTitle();
    String content = memo.getContent();
    // ...
}

4. Serializable의 장점

  • 간편한 객체 전달: Serializable을 사용하면 객체를 직접 전달할 수 있어 코드가 깔끔하고 직관적입니다.
  • 안정성: 자바 표준 인터페이스이기 때문에, 안드로이드에서 안정적으로 사용할 수 있습니다.

5. Serializable 사용 시 주의점

  • 성능 문제: 객체가 크고 복잡할수록 직렬화 및 역직렬화 과정에서 시간이 많이 소요됩니다. 이런 경우 Parcelable을 사용하는 것이 성능상 더 유리할 수 있습니다.
  • 프로토콜: Serializable을 사용할 때는 객체의 상태를 정확히 기록하고 복원할 수 있도록 적절한 직렬화 전략을 세워야 합니다.

결론

Serializable을 사용하면 객체를 Intent를 통해 손쉽게 다른 Activity로 전달할 수 있습니다. 하지만 성능이 중요한 경우, Parcelable을 사용하는 것이 더 나은 선택일 수 있습니다. 이 방식은 간단한 객체 전달이 필요한 경우 유용하며, 특히 Intent를 통해 객체를 전달하는 대부분의 안드로이드 애플리케이션에서 널리 사용됩니다.