본문 바로가기
안드로이드 자바

[JAVA][Android] Intent로 객체 전달하기.

by teamnova 2022. 2. 16.
728x90

안녕하세요. 이번 시간에는 안드로이드에서 Intent로 객체를 전달하는 방법을 알아보도록 하겠습니다.

 

우선 기능을 구현하기 전에 해당 기능이 무엇인지 왜 사용하는지 짚고 구현을 해보겠습니다.

An Intent is a messaging object you can use to request an action from another app component.

안드로이드 공홈에 나와있는 인텐트의 정의입니다. 해석을 해보면 다른 안드로이드 컴포넌트에게 액션을 요청하는 메시지 객체로 알 수 있습니다. 안드로이드를 개발하면 액티비티에서 다른 액티비티로 이동하거나 서비스, 브로드캐스트 컴포넌트를 사용할 때 대게 해당 컴포넌트를 실행시키는 것 뿐만 아니라 데이터를 넘겨주고 싶은 경우가 있습니다. 이때 단순히 원시형 데이터 값 뿐만 아니라 객체를 전달하고 싶은 경우가 있습니다.

 

우선 Intent로 전달할 객체는 Serializable를 구현해야 합니다.

 

import java.io.Serializable;

// Intent로 전달할 클래스 정의 
public class User implements Serializable{
    String name;
    String phoneNumber;
    String address;
}

이렇게 사전에 정의한 User 클래스의 객체를 보내는 곳에서는 다음과 같이 작성해주면 됩니다.

User user =  new User("StickCode", "010-0000-1111", "동작구"); // User 객체 생성

// NextActivity : 넘기고자 하는 Component
Intent intent = new Intent(this, NextActivity.class);intent.putExtra("object", user);
startActivity(intent);
//받는 곳
User user = (User) intent.getSerializableExtra("object"); // 직렬화된 객체를 받는 방법

전체 코드입니다.

MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        User user =  new User("StickCode", "010-0000-1111", "동작구"); // User 객체 생성
        Logger.d("MainActivity : user 주소값 :",user);
        // NextActivity : 넘기고자 하는 Component
        Intent intent = new Intent(this, NextActivity.class);intent.putExtra("object", user);
        startActivity(intent);
    }
}

NextActivity

public class NextActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_next);

        Intent intent = getIntent();
        User user = (User) intent.getSerializableExtra("object"); // 직렬화된 객체를 받는 방법
        Logger.d("NextActivity : user 주소값 :",user);
        Logger.v("User name :", user.name);
    }
}

User

public class User implements Serializable {
    String name;
    String phoneNumber;
    String address;

    public User(String name, String phoneNumber, String address) {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.address = address;
    }
}

코드 중간중간에 보이는 Logger 라이브러리는 아래 포스팅을 이용하시면 해당 프로젝트에 편한게 적용하여 사용하실 수 있습니다.

https://stickode.tistory.com/257

 

[JAVA][Android] Logger 라이브러리 사용하기

안녕하세요. 이번 시간에는 로거 라이브러리를 사용하여 로그를 좀 더 보기 쉽게 찍어 보도록 하겠습니다. 저는 이 로거 라이브러리를 사용하는 이유가 2가지가 있습니다. 첫 번째 이유는 JSON 형

stickode.tistory.com

https://stickode.com/detail.html?no=2519 

 

https://stickode.com/detail.html?no=2519

 

stickode.com

 

결과

여기서 주의하실 점은 MainActivity와 NextActivity에서 생성한 user 객체가 같지 않다라는 것을 확인할 수 있습니다. 즉 데이터는 받아 오지만 객체를 공유할 수는 없으니 개발하실 때 행여나 같은 객체를 참조한다고 생각하시고 개발하지 않도록 합시다!