본문 바로가기

Android

(12)
Clean Architecture for Android 아키텍쳐의 필요성 태초 기존의 서버에서 사용하던 MVC 패턴을 Android,IOS 에 적용하며 개발. 초기에는 큰 문제가없었으나 점점 클라이언트의 몸집이 키지며 관심사 분리에 안되기에 발생하는 문제를 직면 아키텍쳐 도입의 장점 일관적인 코드 작성으로 유지보수와 협업에 도움이된다. 생산성 향상 테스트의 용이성 개발의 방향성을 잡을수있다. 종류 MVC : model + view + controller 서버든 클라이언트든 일반적으로 접할수있는 아키텍쳐 하지만 비지니스 로직과 뷰의 관점 분리가 안되기때문에 안드로이드는 MVP, MVVM을 적용 MVP : model + view(view controller) + Presenter 이곳에서의 뷰는 뷰콜백을 받아 구성하는 구조 모델과 뷰를 함께 관리하긴하지만 중간 ..
Hilt 사용 개요 기존의 DI를 구성하기위해 구글에서 제공한 Degger2를 사용하여 의존성 주입을 하였지만 높은 학습비용 및 많은 보일러플레이트 코드를 생성한다는 단점때문에 조금더 편한 DI 프레임워크가 나오게된다 이게 Hilt이다. Hilt는 Dagger를 쉽게 사용할수있도록 도와주는 도구이다. 💡Dagger 은 칼 종류이고 Hilt는 칼집 으로 네이밍 하였다. 프로젝트 세팅 의존성 추가 프로젝트 레벨 buildscript { repositories { } ext{ hiltVersion = '2.38.1' } dependencies { classpath "com.google.dagger:hilt-android-gradle-plugin:${hiltVersion}" } } 앱 레벨 plugins { id 'kotli..
Android ViewBinding으로 FindViewByid 랑 작별하기 1 서론 1.1 FindViewByid 안드로이드에서 Layout에 존재하는 컴포넌트를 객체로 사용하려면 FindViewByid를 통하여 작업을 했어야 했다. 만약 접근하려는 컴포넌트가 5개, 10개만 넘어도 class 파일에는 FindViewByid 가 많이 붙게 되는 걸 볼 수 있다. 또한 개발자의 실수로 인해 잘못된 컴포넌트를 참조하려 하면 null이 발생하는 문제가 있다. 예전에 Kotlin에서는 kotilin-android-extensions 을 통해 FindViewByid 없이도 컴포넌트에 접근하여 사용할 수 있는 게 큰 매력으로 다가왔지만 이제는 여러 문제점으로 인해 kotilin-android-extensions를 기본으로 제공하지 않는다. 따라서 이제는 ViewBinding를 사용하도록 ..
Android Coroutine 사용하기 1. Coroutine Coroutine은 Co(협력) + Routine(규칙적인 작업)의 합성어로 하나의 작업이 끝날 때까지 계속 진행되는 것이 아니라 실행 중간에 다른 작업을 하러 갔다가 다시 돌아와서 작업을 이어서 진행할 수 있다. 1.1. Coroutine 은 Thread 가 아니다. 같은 백그라운드 작업을 하는 점에서 비슷하지만 Coroutine은 하나의 작업이라면 Thread는 그 작업을 수행하는 공간이다. 즉 하나의 Thread에서 여러 Coroutine 을 동시에 실행할 수 있다. 1.2. 의존성 추가 implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.5" 1.3. Scope 코루틴은 실행 범위, 제어 범위를 지정할 ..
Android inflation 란 1 Inflation 1.1 서론 Android 에서의 inflation 을 알아보려한다. inflation은 xml 레이아웃 파일로 정의한 정보를 런타임 중에 메모리 상에 객체로 만들어주어 화면에 보여주는 과정을 의미한다. 즉 Android 개발을 하면서 View를 만들기 위해 작업하였던 xml을 실제로 사용할 수 있게 해주는 작업이라고 할 수 있다. 1.2 Inflation 사이클 이미지를 보고 간단하게 확인하면 xml 을 정의하고 실행 시 메모리로 xml을 로딩하여 화면에 보여주는 순서이다. 이 일련의 작업은 xml 레이아웃 파일을 실제로 사용할 수 있도 록에서 view ID 를 설정하고 해당 ID가 R 파일에 주소값으로 적용되어 findViewById 메서드 와 Id를 활용하여 코드상으로 View..
Android Activity 생명주기 1 Activity 1.1 서론 Activity는 안드로이드 4대 컴포넌트중 하나로 가장 UI에 관련을 가지고있기떄문에 가장 기본이 되는 구성요소이다. Activity는 생명주기 안에서 여러 상태로 전환이되며 활동의 상태 변화에 따라 여러 콜백을 제공한다. 생성부터 소멸까지 7가지 상태 변화를 가지는 생명주기에 대해 알아볼 것이다. 2 생명주기 2.1 3가지 상태에 대해 Activity는 크게 3가지 상태가 존재할수있다. 실행상태(Running) : ActivityStack의 최상위에 존재하며 포커스를 가지고 있어 사용자에게 보이는 상태이다. 일시 중지 상태(Paused) : 사용자에게 보이기는 하지만 다른 Activity가 자신보다 위에 있어 포커스를 받지 못하는 상태이다. 예로 대화상자가 나온경우 이..
Android 에서 Context가 무엇일까 1 궁금증 1.1 서론 Context라는 알 것 같은 하지만 모르겠는 이 친구에 대해 알아보려 한다. 흔히 activity를 띄우거나 앱의 패키지 이름이나 리소스의 데이터를 가져올 때 context를 사용한다. 하지만 왜 사용해야 하는지를 잘 모르고 사용한 것 같다. 그래서 한번 알아보려고 한다. 1.2 언제 사용하는 걸까 “Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as ..
Android Intent에서의 Bundle 에 대해 1 Intent 인텐트는 메시징 객체로 다른 요소로부터 작업을 요청하는 데 사용할 수 있다. 대표적으로 사용하는 방법이 역시 액티비티를 호출하는 것이다. 2 의문 2.1 Intent 에서 데이터 전달 intent에서 데이터를 전달하는 방법으로 인텐트 내부에 구현되어 있는 putExtra 메서드를 활용하는 방법이 있다. 여기서 의문점이 드는데 val intent = Intent() intent.putExtra("key","value") val intent = Intent() val bundle =Bundle() bundle.putString("key","value") intent.putExtra("bundle",bundle) 이 두 차 이를 알고 싶다 위와 같이 두 방식을 사용하게 돼도 같은 결과가 이루어..