Android 개발을 시작한 지 얼마 지나지 않았을 때 BaseActivity, BaseFragment를 생성하고, Activity와 Fragment가 이를 상속받는 코드의 형태를 봤었습니다. 그때 당시는 더 복잡하고, 보는 사람으로 하여금 혼동을 주는 코드라고 생각했지만, BaseActivity와 Fragment를 상속받음으로써 해결되는 다양한 장점들이 있었습니다. 왜? AppCompatActivity, Fragment가 아닌 BaseActivity, BaseFragment를 상속받는 것은 중복된 코드의 발생을 줄일 수 있습니다. 뭐 얼마나 코드의 중복이 발생하길래 복잡한 구조(BaseActivity와 BaseFragment)를 택하는걸까라고 생각하실 수 있습니다. class TestActivity :..
프로젝트에서 Network 연결 상태에 따라 API 동작 및 화면을 갱신해야 했습니다. 여러 가지 방법이 있지만, 저는 공식문서에 나와있는 ConnectivityManager를 통해서 해결했습니다. 네트워크 상태 읽기 | Connectivity | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 네트워크 상태 읽기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android에서는 앱이 연결의 동적 변 developer.android.com 설명하기 전 네트워크 사용을 위해선 안드로이드 매니페스트에 다음 권한을 포함해야 합니다. 해당 권한은 음악, 갤러리 접근과 달리 일반권한이기 때문에 런타임에 요청할 필요가 없습..
Contract 1.3.60 버전부터 사용되었으며, 컴파일러가 이해할 수 있게 명시적으로 자신의 동작을 설명할 수 있게 한다. 컴파일러가 이해할 수 있게 라는 말이 조금은 헷갈릴 여지가 있다고 생각한다. 코드를 통해 살펴보자 회원가입을 구현하려고 할 때의 시나리오를 생각해 보자. @JvmInline value class Password(val password: String) @JvmInline value class Id(val id: String) fun validate(id: Id?, password: Password?): Boolean { return id != null && password != null } fun signUp(id:Id?, password: Password?){ if(validat..
등장 배경 원시타입과 문자열을 wrapping 하기 위해 사용했던 데이터 클래스와 클래스는 추가적인 객체 생성과 메모리 할당이 필요했다. 하지만 value class가 추가되면서, 객체 생성 및 메모리 할당을 최소화하고 성능을 개선할 수 있게 되었다. kotlin 1.5에서는 inline class로 사용되었지만, 현재는 Deperecated 되었다. 현재 1.6에서는 value class로 사용하고 있다. 정의 primitive 타입이나, 다른 value class를 감사는 wrapper 클래스로서의 역할을 할 수 있다. 특징 상속이 불가능하다 @JvmInline value class Email(private val email:String) value class SchoolEmail(private va..
고차 함수와 함숫값을 사용하면 함수가 객체로 표현되기 때문에 성능 차원에서 부가 비용이 발생한다. 이러한 부가 비용을 줄일 수 있는 해법이 Inline 기법이다. fun testInLine() { val time = 5 repeatInline(time) { println("inlie : $it") } } fun repeatInline(time: Int, action: (Int) -> Unit) { for (i in 0 until time) { action(i) } } fun main() { testInLine() } 코틀린 코드를 자바로 디컴파일해보면 아래와 같은 결과를 얻을 수 있다. public final class SolutionKt { public static final void testInLin..
프로젝트를 하면서 Ui State와 Ui Event를 통해서 데이터에 대한 변화와 사용자 입력에 대한 변경사항을 UI에서 반영하도록 코드를 작성했습니다. 하지만 기존 코드의 문제점(?)과 제가 UI Layer에 대한 이해도와, Ui State, Ui Event 코드를 잘못이해한 거 같아서 UI layer에 대한 역할과 state, event에 대해서 공부해봤습니다 ㅎ 개인적으로 공부하고 적은 글이라는 점이라서 정확하지 않을 수 있어요 UI Layer 공식문서에서 권장하는 Clean Architecture중 하나의 영역입니다. UI 레이어에 대한 역할은 다음과 같습니다. 화면에 어플리케이션 데이터를 표시하고, 사용자 상호작용의 기본 지점으로의 역할을 수행하는 것 말이 조금은 딱딱한 감이 있는데, 쉽게 말하..
개요 프로젝트에서 코루틴을 많이 사용했지만, 코루틴에 대해서 정확하게 알지 못하고 기존 코드를 그대로 사용한 적이 많았다. 공식문서에서 비동기 작업으로 코루틴을 권장하고, 애플리케이션 특성상 비동기 작업이 중요한 만큼 한번 자세히 다룰 필요성이 있다고 느꼈다. 코루틴에 대해서 설명하기전에 비동기 작업이 왜 중요한지, 어떤 것인지 알고 넘어갈 필요성이 있다. 여기선 동시성과 병렬성이라는 단어의 차이를 알 필요성이 있다. 동시성 vs 병렬성 동시성 둘 이상의 작업이 동시에 실행되는것을 의미한다. 여기서 말하는 동시는 정확하게 같은 시간에 실행되는 것이 아닌 동시에 실행하는 것처럼 보인다는 의미이다. 예를 들어 N명의 사람이 하나의 큰 작업을 하는데, 동시에 작업을 하는것이 아닌 1명씩 돌아가면서 작업을 하는..
개요 Activity와 Fragment는 Android에서 화면을 구성하는 두 개의 클래스이다. 안드로이드 개발을 하면서 어떤 화면에선 Activity를 사용하고, 어떤 화면에선 Fragment를 사용하곤 하는데 각각의 특징을 통해서 화면을 구성하는데 Activity와 Fragment를 사용하는 기준을 공부하고자 한다. 그리고 공부한 것 내용을 토대로 개인적인 생각을 적은 글이라 너무 맹신하진 않았으면 좋겠습니다..ㅎ Activity 우선 Activity에 대해서 많은 사람들이 알고 있다고 생각합니다. Android의 4대 컴포넌트 중의 하나이며, 앱이 사용자와 상호작용을 하는 UI를 그리는 창을 제공해 줍니다. 흔히들 Android Studio에서 처음으로 프로젝트를 생성할 때 만들어지는 것이 Main..
Data class는 Kotlin 언어로 바꾼 뒤 정말 많이 사용하는 클래스이다. 이러한 Data class가 일반 클래스와 어떤 것이 다르기 때문에 자주 사용되는 걸까에 대해서 알아볼까 한다. 우선 가장 큰 차이점은 Data class 자동으로 메서드를 만들어준다는 점이다. 자동으로 메서드를 만들어주는 게 왜 그렇게 큰 차이점일까에 대해서 궁금할 수도 있지만, 자동으로 만들어주는 메서드가 정~말정말 유용하기 때문에 Data class는 Kotlin에서 아주 사랑받는 녀석이다. Data class에서 자동으로 만들어주는 메서드는 다음과 같다. toString() equals() hashCode() copy() 위 메서드를 살펴보기 전에 Data class의 특징에 대해서 먼저 알아볼까 한다. Data c..