본문 바로가기
안드로이드 코틀린

[Kotlin][Android] Intent로 객체 전달하기

by teamnova 2022. 2. 25.
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

data class User(
    val name : String, 
    val phoneNumber : String,
    val address : String 
) : Serializable

 

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

 // 보내는 곳
 // NextActivity : 넘기고자 하는 Component
 val intent = Intent(this, NextActivity::class.java)
 intent.putExtra("object", user)
 startActivity(intent)


 // 받는 곳
 val intent = intent
 val user = intent.getSerializableExtra("object") as User? // 직렬화된 객체를 받는 방법

 

전체 코드는 다음과 같습니다.

MainActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

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

        Logger.d("MainActivity _ user 객체 :$user")

        // NextActivity : 넘기고자 하는 Component
        val intent = Intent(this, NextActivity::class.java)
        intent.putExtra("object", user)
        startActivity(intent)
    }
}

NextActivity

class NextActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_next)


        val intent = intent
        val user = intent.getSerializableExtra("object") as User? // 직렬화된 객체를 받는 방법

        Logger.d("NextActivity _ user 객체 :$user")
        Logger.v("User name :" + user!!.name)
    }
}

User

data class User(
    val name : String,
    val phoneNumber : String,
    val address : String
) : Serializable

 

코드 중간중간에 보이는 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에서 받아올 수 있습니다.