1. Serializable
Serizlzable은 java에서 기본적으로 제공하는 인터페이스로, 액티비티 -> 액티비티에서 정보를 전달할 때 사용할 수 있다.
putExtra로 보낸 데이터를 getSerizlzable 메소드를 통해 데이터로 받을 수 있다.
예를들어 이전 구현했던 과제를 보자면
data class Friend(
val id: String, val name: String, val mbti: String, val stateM: String,
val gitURL: String,
val velURL: String
) : Serializable
해당 데이터 클래스를 Serializable을 상속시키는 것으로 해당 인터페이스를 사용할 준비를 끝낸다.
내부적으로 알아서 직렬화,역직렬화를 완성시켜주기 때문에 사용하기에는 편리하나, 불필요한 리플렉션이 발생하여 어플리케이션의 성능을 떨어트리는 결과물이 완성된다. 이는 Serializable 인터페이스에 좀 더 하드코딩으로 역직렬화를 구현해내면 해소되는 문제이나, 우리는 그럴 필요가 없다.
좋은 퍼포먼스를 내며 액티비티간 데이터를 보낼 수 있는 Paracelable이 코틀린에 존재하기 때문이다.
2. Parcelable
Paracelable은 직렬화는 알아서 해주지만 역직렬화를 프로그래머가 직접 구현함으로써 필요없는 값을 발생시키지 않을 수 있다. 그러나 리플렉을 발생시키지 않기 위해 사용하는 보일러 플레이트 코드들이 무수히 많이 생겨서 유지보수가 힘들어진다.
그런데 안드로이드 스튜디오에서는 @Paracelize를 사용하면 역직렬화를 알아서 해준다!
이 플러그인을 사용해서 만들어지는 어노테이션(보일러 플레이트 코드들)은 왠만해서는 건드릴 일이 없으므로 어떻게 구성되어있는지만 알아두면 좋을 것이다.
해당 인터페이스를 사용할려면 먼저 gradle로가서
plugins {
id("kotlin-parcelize")
}
해당 플러그인을 추가해준 다음 sync now를 해주면 사용이 가능하다.
import kotlinx.parcelize.Parcelize
@Parcelize
class User(val firstName: String, val lastName: String, val age: Int): Parcelable
그 다음으로는 직렬화할 class에 @Paracelize 속성을 추가한 다음 Paracelable 인터페이스를 상속시켜준다.
3. 결론
Serializable은 제한적으로 사용하였을 때 Paracelible보다 좋은 성능을 낼 수 있기도 하다.
그러나 안드로이드 스튜디오에서는 Paracelible을 사용할 때 생성되는 보일러 코드들을 플러그인(@Paracelize)을 통해 간편하게 줄일 수 있다.
따라서 구태여 제한적으로 사용하기 보다는 좀 더 간결하고 깔끔하게 사용할 수 있는 Paracelible을 사용하는 것이 좋을 것 이다.
4. const val/val
Const val은 val보다 강력한 불변성을 가지게 된다.
companion object 안에 선언되며, 컴파일 되는 순간 메모리에 존재하기 때문에 직접적으로 접근할 수 있다.
const val은 어떤 함수,클래스에서 사용 되더라도 상태에 상관없이 불변의 값을 가지게된다.
const val의 선언은 보통 대문자와 언더바를 사용한다.
companion object{
const val CONST_VAL = 100
}
이런식으로 말이다.
5. const val로 인텐트 보내기
companion object{
const val EXTRA_TITLE:String = "title"
const val EXTRA_DETAIL:String = "detail"
}
val intent = Intent(this@TodoaddActivity, MainActivity::class.java).apply {
putExtra(EXTRA_TITLE, title)
putExtra(EXTRA_DETAIL, detail)
}
key값을 companion object로 사용하면 좀더 체계적인 관리를 할 수 있다.
해당 key값은 사용되는 액티비티와 상호작용하는 액티비티 간에서만 사용되는 것이 대부분이므로, 같은 속성끼리 묶어둔다고 볼 수도 있다.
또한 key값을 companion object에서 사용한다면, 상호작용하는 액티비티에서 직접적으로 호출할 수 있으므로 재사용성이 높아진다.
5.정규 표현식
코틀린에서는 regex 라이브러리로 사용할 수 있으며 잘만 쓴다면 코드의 길이를 극적으로 단축시킬 수 있다.
이전에 내가 구현했던 MBTI판단은
mbti.matches(Regex("[EI][SN][TF][JP]"))
무수한 if문을 사용해서도 구현할 수 있지만, 이렇게 간단하게 EI SN TF JP가 해당 각각의 공간에 들어가는지 판단할 수 있다. 무척이나 유용하지 않을 수 없다.
자세한건 참고블로그로!
참고 블로그
1)리플렉션
https://www.charlezz.com/?p=756
안드로이드와 Java의 Reflection | 찰스의 안드로이드
Reflection이란? Reflection은 자바 언어의 기능중 하나로 프로그램 내부 속성을 조작 할 수 있게 합니다. 예를 들어 Java클래스가 가지고 있는 모든 멤버의 이름을 가져와서 표시 할 수 있습니다. 다른
www.charlezz.com
https://jeongkyun-it.tistory.com/225
[Java] 리플렉션 (Reflection)이란 무엇일까? (개념/ 예시)
서론 이번 포스팅에서 다룰 내용은 '리플렉션'이다. 최근 "리플렉션이 무엇인가요?" 라는 질문을 받았는데, 제대로 된 답변을 못한 것 같다. C# 개발을 할 때 분명 사용은 해보았지만 개념적으로
jeongkyun-it.tistory.com
2) Serializable 그리고 Parcelable
https://www.charlezz.com/?p=823
Parcelable과 Serializable 비교 | 찰스의 안드로이드
Serializable은 분명히 개발자 입장에서는 편합니다. 인터페이스 구현만 하면되니까요. 하지만 앱 사용자에게는 퍼포먼스저하와 베터리 드래인이라는 큰 단점을 안겨 줍니다. 조금은 귀찮더라도 Se
www.charlezz.com
https://blog.naver.com/PostView.nhn?blogId=bestowing&logNo=222014802794
[Android] Parcelable이란?
글 구성 1. 정의 (Parcelable이란) 2. 사용하는 이유 3. 사용 예시 3-1. 인스턴스 하나 전달 3-2. Array...
blog.naver.com
https://developer.android.com/kotlin/parcelize?hl=ko
Parcelable 구현 생성기 | Kotlin | Android Developers
Parcelable 구현 생성기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. kotlin-parcelize 플러그인은 Parcelable 구현 생성기를 제공합니다. Parcelable 지원을 포함하려
developer.android.com
[Android/Kotlin] Intent 에 커스텀 객체 전달하기? 직렬화, 역직렬화 Serializable 과 Parcelable, @Parcelize
[시작하며 (반성)] 한 화면에서 다른 화면으로 이동할 때 데이터를 전달하려고하는 데, Primitive type 이 아닌 내가 만든 data class(디자인 패턴을 관점에서는 POJO 클래스, Model) 을 통째로 전달하고 싶
nosorae.tistory.com
속도차이
Parcelable vs Serializable , 정말 Serializable은 느릴까?
원문 : “Parcelable vs Serializable”
medium.com
3) VAL과 const VAL
https://angangmoddi.tistory.com/201
코틀린 17. const와 상수
이번 글에서는 const라는 것에 대해서 알아보도록 하겠습니다. 이 카테고리 초기에 변수에 대해서 알아봤을 때, 저희는 변수를 선언하는 방법을 두 가지 알아봤습니다. 언제든 값을 바꿀 수 있는
angangmoddi.tistory.com
4)정규표현식
https://hamait.tistory.com/342
정규표현식 (Regex) 정리
정규표현식은 아주 가끔 쓰기때문에 항상 다시 볼때마다 헷갈리곤 하기에 주요 사용예를 내가 나중에 다시 봤을 때 편하도록 정리하여 보았다. 정규 표현식의 용어들정규 표현식에서 사용되는
hamait.tistory.com
'개발노트 > Kotlin' 카테고리의 다른 글
8주차 5일 fragment와 액티비티등 (0) | 2023.09.01 |
---|---|
8주차 2일 item 클릭/ 레이아웃의 기능 (0) | 2023.08.29 |
7주차 4일 코틀린 문법들과 기타등등 (0) | 2023.08.24 |
7주차 3일 fragment에서 viewbinding과 fragment의 구?조? (0) | 2023.08.23 |
7주차 2일 activity->frament 그리고 adapter (0) | 2023.08.22 |