[Android] 클래스 데이터 전송 - Intent Serializble

원준·2023년 7월 20일

Android Studio

목록 보기
18/40

Serializble - 직렬화 ?

  • 정의

    자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(Byte) 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)을 아울러서 말한다.

    시스템적으로 말하면 JVM의 메모리에 상주 (힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태를 말한다.

  • 아니 그래서 뭔데?
    • 객체를 파일로 저장하거나 읽거나, 다른 서버에서 객체를 받거나 할때 사용을 해야하는데 일반적으로는 사용를 못하니 Serializble(직렬화)를 통해 사용이 가능하게 해주는 것이다.
    • 쉽게 생각하면 Intent로 Class 자체를 담아 보내는 것이 불가능한데(내가 만든 Class는 정의되어 있지 않음), 이걸 가능하게 해주는 방법이 직렬화다.

사용하는 방법은 ?

  • Intent에 Class를 담아서 보내는 방법으로 설명을 하겠다.
  • 해당 방법으로 Class를 보내면 해당 Class를 담은 ArrayList도 Intent를 통해 데이터를 보낼수 있다.
  1. 우선 데이터를 담는 Class에서 인터페이스를 생성해서 직렬화를 설정해주자

    public class Contact implements Serializable {
       private String name;
       private String phone;
    
       private int id;
    }
  2. Intent를 사용하는 부분에서 데이터를 보낼때 해당 데이터를 담는다. (ArryaList도 가능함)

    //한꺼번에 보내는 것이 좋다.
    intent.putExtra("contact", contact);//원래는 보낼수 없음
                   //인터페이스를 상속받는다면 보낼 수 있다.
    
    startActivity(intent);
  3. 데이터를 받는 곳에서 Serializable를 통해 데이터를 받아오자.

    //시리얼라이즈를 받아오면 형변환을 해서 사용해야한다.
    Contact contact = (Contact) getIntent().getSerializableExtra("contact");
    • ArrayList를 만약 보내서 받는다면 형변환을 ArrayList로 설정해야한다.
      ArrayList<Contact> contactArrayList = (ArrayList<Contact>) getIntent().getSerializableExtra("contactArrayList");
profile
공부해보자

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

정말 잘 읽었습니다, 고맙습니다!

답글 달기