목표
SignUpActivity에서 입력받은 4개의 정보 (ID, PW, NICKNAME, MBTI)를 LoginActivity로 보내고자 한다.
새롭게 아래에 파일을 데이터 파일을 만드는게 좋다

현 상황, SignUpData파일을 하나 만들어서 데이터들를 정렬 해놓은 상황
// SignUpData
@Parcelize
data class UserDataInput(
val userId: String,
val userPW: String,
val userNickName: String,
val userMbti: String,
) : Parcelable
액티비티에서 액티비티로 '객체'를 전달할 때 사용한다.
필드값 하나 하나를 putExtra()를 이용하여 코드를 더럽게 썼던 지난 날들을 뒤로 하고..
한 번에 객체 자체를 통째로 넘기는 방법에 쓰인다.
Serializable과 Parcelable에 관해 너무 잘 정리한 글이 있어 아래에 첨부하겠다.
https://velog.io/@haero_kim/Android-Serializable-vs-Parcelable
app수준의 build.gradle에 plugin 추가 후 sync를 해보자 ㅎㅎ
plugins {
id "kotlin-parcelize"
}
UserDataInput이라는 data class를 가져와서 원하는 데이터를 담아보자
잠시, 현재 상황을 한 눈에 보기 위해 그림을 그려봤다.

//SignUpActivity
binding.btnSignup2.setOnClickListener {
val signid = binding.etIdSignup.text.toString()
val signpw = binding.etPwSignup.text.toString()
val signname = binding.etNicknameSignup.text.toString()
val signmbti = binding.etMbtiSignup.text.toString()
val userData = UserDataInput(signid, signpw, signname, signmbti)
userData라는 변수명을 하나 만든 뒤, dataClass에서 가져온 UserDataInput클래스를 가져와서 4개의 변수를 넣어준다.
val userData = UserDataInput(signid, signpw, signname, signmbti)
이 코드를 통해 현재 SignUpActivity에서 입력받은 4개의 변수가 저장되었다.
with(binding) {
btnSignup2.setOnClickListener {
val signid = etIdSignup.text.toString()
val signpw = etPwSignup.text.toString()
val signname = etNicknameSignup.text.toString()
val signmbti = etMbtiSignup.text.toString()
}
}
이제 userData를 LoginActivity로 보내는 일을 해보자 (형광펜 친 과정)

val intent = Intent(this@SignUpActivity, LoginActivity::class.java).apply {
putExtra(LoginActivity.INTENT_USER_DATA, userData)
}
startActivity(intent)
putExtra(key값, value값)
value, 즉 전달하고자 하는 내용을 담으면된다.
아까 만들었던 userData가 value가 된다.
//LoginActivity
companion object {
const val INTENT_USER_DATA = "userData"
}
이때, userData를 받을 액티비티인 LoginActivity에는 받은 userData전체를 INTENT_USER_DATA로 상수화를 시켜줬다.
때문에, 이제 우리는 putExtra를 모두 이해할 수 있다
putExtra(옮기고자하는_엑티비티명.그_액티비티에_상수화_변수명, 옮기고자 하는 값)
그 이후,
//LoginActivity
val userData = intent.getParcelableExtra<UserDataInput>(INTENT_USER_DATA)
loginActivity의 userData(변수명은 같으나 다른 액티비티에서 선언된 변수)에 다시 가져와주는 것이다.
만약, data class 전체 내용 중 일부만 불러오고 싶다면? data class로 다시 가보자
@Parcelize
data class UserDataInput(
val userId: String,
val userPW: String,
val userNickName: String,
val userMbti: String,
) : Parcelable {
fun getUserSignUpId(): String {
return userId
}
fun getUserSignUpPw(): String {
return userPW
}
}
선언한 data class 아래에 함수를 만들어 원하는 데이터를 get 해오자
@Parcelize 어노테이션을 사용하면 자동으로 Parcelable을 구현하는 코드를 생성해주는데, 이 때 getter 메서드가 자동으로 생성되기 때문에!
fun getUserId(): String {
return userId
}
이런 함수명을 쓰면 충돌이 일어나게 되니, 조심하자.
다시 돌아가서 함수명에서 충돌이 안일어나게 getUserSIgnUpID를 만들었다면
//SignUpActivity
val signId = userData?.getUserSignUpId()
val signPw = userData?.getUserSignUpPw()
이렇게 불러올 수 있게 된다.
이때, 불러오는 data class가 변수가 null일 수 있기에 nullable 검사를 수행해서 NullPointerException 발생을 막아야한다.