728x90
반응형
- [ Android ]Clean Architecture를 이해하기 위해 알아보는 SOLID 원칙2023-03-07 14:44:16들어가며 Clean Architecture와 함께 등장하는 MVP, MVVM 패턴 나는 이전에 MVVM 패턴을 적용하면 클린 아키텍처를 구현한 것이라고 착각했었다. 클린 아키텍처 == MVVM 패턴 이렇게 생각했다는 의미다. 그리고 앱을 만들어서 그냥 돌아가기만 하면 되는데 왜 굳이 초기 비용을 들여가면서 좋은 설계를 해야만 하는가에 대한 이유를 찾아다녔다. 그런데 생각해보면 이는 당연하다. 다들 내진 설계 잘된 집에서 살고 싶겠지? 냅다 빨리 지은 건물에서 살고 싶겠냐구... 무슨 일이 생길 줄 알고 ㅋㅋ 각설하고, MVP, MVVM 패턴들은 클린 아키텍처 구현을 구현하는 방법 중 하나이지 그 자체로 클린 아키텍처라고 볼 수 없다. 클린 아키텍처를 이해하기 위해 필수로 선행되어야 하는 SOLID 원칙에..
- [ Android/Android ]내 프로젝트와 Firebase 연동하기2023-03-06 18:25:151. Firebase 사이트로 이동한다. 링크 2. 시작하기를 누른다. 3. 프로젝트 만들기를 클릭한다. 4. 프로젝트의 이름을 입력한다. 각 화면의 안내에 따라 프로젝트를 생성하면 된다. 5. 프로젝트 생성이 완료 되었으면 firebase를 추가한다. 연결하려는 프로젝트는 Android App이기 때문에 해당 아이콘을 눌러준다. 5-1. 앱 등록 화면 패키지 이름 : 해당 프로젝트의 패키지 이름을 넣으면 된다. AndroidManifest.xml 에서도 확인할 수 있다. 5-2. 구성 파일 다운로드 후 추가 화면 안내하는 대로 따라하면 된다. 5-3. Firebase SDK 추가 프로젝트 수준 build.gradle buildscript { ext.kotlin_version = "1.6.10" repo..
- [ Android/Android ][Android] Hilt 적용해보기2023-01-04 22:36:38들어가며 DI (Dependecy Injection)에 대해서는 어느정도 들어보거나 또는 알 것이라고 생각한다. 한번 더 짚고 넘어가자면 의존 관계에 있는 클래스의 객체를 외부로부터 생성하여 주입받는 것을 의미한다. DI, 의존성 주입 컴퓨터를 만들기 위한 클래스를 설계한다고 생각해보자. (getter, setter 및 생성자는 생략한다.) CPU가 필요하고 RAM, 저장장치(ROM)도 필요하겠지? public class Cpu { String name; String company; } Computer 클래스는 이렇게 구성된다고 치자. public class Computer { int ram; int ssd; Cpu cpu; } 이때, Computer는 Cpu 클래스를 의존하고 있다. 의존이란 쉽게 말해..
- [ Android/Android ][Android] 부팅 시 앱 실행하기 | Android 10+ Application startup on BOOT2022-09-21 00:28:11들어가며 부팅 시 앱이 실행 되었으면 좋겠다는 요구 사항이 들어왔다. 예전에 부팅 되었을 때 관련 데이터를 삭제하는 기능을 잠깐 검토 했던 기억이 있어서 금방 하겠거니 생각했다. 그렇게 영원한 나의 친구이자 스승인 구글에 관련 기능을 검색했다. 1. AndroidManifest.xml 에 권한을 명시하고 2. Receiver를 만들고 class DeviceBootReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { val action = intent?.action if (action.equals(Intent.ACTION_BOOT_COMPLETED)){ val appIntent = Intent..
- [ Android/Android ]LeakCanary 사용하기2022-08-07 00:35:06들어가며 지난번의 메모리 누수 이슈로 원인을 찾아 헤매다 LeakCanary를 알게 되었다. 안드로이드 스튜디오에서 제공하는 프로파일러에서도 memory leak 을 잡아 낼 수 있는데 개인적으로 사용하기가 어려웠다. 그래서 따로 사용하는 법(?) 이해하는 법을 학습했지만 문제를 해결하기 위한 원인을 찾아내는 데에는 한계가 있었다고 생각한다. 그래서 LeakCanary를 사용해보고자 하였다. 메모리 누수 memory leak A small leak will sink a great ship. - Benjamin Franklin 쉽게 얘기해서 우리는 먹으면 싸야한다. 근데 그게 제때 배출이 안되고 안에서 자꾸 쌓인다고 생각하면 어떤가? 탈이 난다. 더이상 참조되지 않는 것들은 가비지 컬렉션에 의해 수거되어야..
- [ Android/Android ]fastlane 으로 Android 앱 배포 쉽게 하기 (feat. windows)2022-07-05 23:40:38들어가며 개발이 어느정도 마무리가 되면..(끝은 없으니까요 ^_ㅠ?) 사용자를 만나기 위한 준비를 해야한다. 여차저차 준비를 하고 내 자식같은 아이가 세상에 나오면.. 높은 확률로 다시 고쳐야할 일이 생긴다. 수정하고 내놓고 수정하고 내놓고.. 안드로이드 앱의 경우 출시 및 출시 준비 과정은 다음과 같다. (간략하게 작성한것으로 상이할 수 있습니다.) 1. 출시 전 속성 지정 및 설정 - debuggable = false (안하면 앱이 안올라가는거 아시죠) - app signing (빌드할 때 보통 자동으로 되지만 일단 넣었다.) - versionCode++ - versionName 지정 2. buildType 지정 후 build 진행 3. play console 에서 업로드 진행 4. 내부 테스트용 앱..
- [ Android/Android ]Android Jetpack Compose 맛보기2022-07-03 23:03:42Android Jetpack Compose 네이티브 Android UI를 빌드하기 위한 최신 도구 키트 Jetpack Compose 선언적 UI 방식 💡 상태를 UI 로 변환한다. UI는 변경할 수 없고 한번 생성하면 업데이트가 불가능하다. 앱 상태가 바뀌면 새로운 상태를 새로운 표현으로 변환하는 것 ⇒ 동기화 문제가 완전히 해결된다. 문장을 읽었을 때는 상태가 바뀌면 다시 그림을 그리겠다는 것으로 이해되어 비효율적이지 않을까 생각했다. 하지만 compose 는 지능적이기 때문에 변경되지 않은 요소의 작업은 건너 뛴다고 한다. 따라서 코드는 특정 상태에 대한 UI 형태를 설명할 뿐 생성 방법을 지정 하지는 않겠다는 것이다. Declarative UI Toolkit 요즘의 앱들은 데이터가 동적이고 실시간으..
- [ Android/Android ]안드로이드 애플리케이션 설계 패턴2022-06-18 14:35:56MVC 패턴 💡 애플리케이션 구조를 Model, View, Controller 세개의 측면으로 관심사를 분리한다. 개발을 배울 때 가장 먼저 배운 패턴이다. 그렇기 때문에 이해하기도 가장 쉬웠다고 생각한다. 안드로이드에서 activity, fragment 가 view 역할을 한다. 동시에 controller 의 역할을 하기도 한다. 장점 직관적이다. 위에서 이해하기 쉬웠던 이유가 바로 이 장점 때문이 아닐까? 코드를 파악하기 쉽다. 단점 (안드로이드에서는) 위에서 말했듯 activity, fragment 가 뷰와 컨트롤러의 역할을 겸하다 보니 앱의 규모가 커지면 수천줄의 코드가 작성되어 유지보수가 힘들어진다. 컨트롤러는 뷰와 모델에 의존적이고, 뷰는 모델에 의존적이기 때문에 결합도가 높아 유닛 테스트가 ..
728x90
반응형