안드로이드의 IPC(Inter-Process Communication)를 위해 만들어진 인터페이스다. IPC는 같은 시스템에서 실행되는 서로 다른 프로세스 간 데이터를 전송하는 매커니즘이다. 안드로이드에선 이걸로 다른 앱 또는 앱 안의 컴포넌트 간에 데이터를 전달해서 통신할 수 있게 된다. 이 인터페이스를 사용하면 객체를 이동시키기 위한 방법인 마샬링(또는 직렬화)를 정의할 수 있게 된다. 그러나 마샬링 정의 과정이 복잡하기 때문에 에러가 발생할 확률이 올라가고, 코드가 길어지기 때문에 가독성도 떨어질 수 있다.
코틀린에서 제공하는 어노테이션으로 Parcelable 인터페이스 구현을 간소화한다. 컴파일러는 이 어노테이션이 붙은 클래스에 대해 자동으로 Parcelable 구현을 만들어 준다. 즉 개발자가 덜 귀찮아질 수 있고 가독성을 올릴 수 있다.
@Parcelize
data class GoodsData(
val gImage: Int,
val gName: String,
val address: String,
val gExp: String,
val gPrice: Int,
val sellerName: String,
var likeCnt: Int,
val chatCnt: Int,
var isLike: Boolean
) : Parcelable
다른 액티비티로 부터 객체를 전달받고 추출하는 코드
private val item : GoodsData? by lazy {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
intent.getParcelableExtra(Constants.ITEM_OBJECT, GoodsData::class.java)
}else{
intent.getParcelableExtra<GoodsData>(Constants.ITEM_OBJECT)
}
binding.detailPrice.text = DecimalFormat("#,###").format(item?.gPrice)+ "원"
데이터 클래스에서 gPrice 를 String으로 주고 가격 표시를 하드코딩으로 했었는데 이렇게 DecimalFormat으로 패턴을 정할 수 있는 방법이 있었다.