본문 바로가기

Android

(66)
Parcelable과 Serializable란? Parcelable과 Serializable란? 안드로이드 앱을 개발할 때 인텐트에 전달할 데이터를 추가하는데, 복잡한 클래스의 객체를 추가하려는 경우 직렬화를 통해 인텐트에 추가해야합니다. Parcelable Parcelable은 직렬화를 위한 또 다른 인터페이스로, Serializable과 달리 Android SDK의 인터페이스 입니다. Parcelable은 직렬화 처리 방법을 사용자가 명시적으로 작성해야하기 때문에 자동으로 처리하기 위한 Reflection이 필요없습니다. 하지만 구현해야하는 필수 메서드를 포함하고 있어 Class에 보일러 플레이트 코드가 추가되어, Class를 이해하기 어렵고, 새로운 기능을 추가하기 힘들게 만들며, 코드의 추가로 Class가 복잡해 질수록 유지보수가 어려워지는 원..
Repository Pattern (리포지토리 패턴) 비즈니스 로직이란? 일반적으로 데이터베이스와 UI 사이에서 정보 교환을 처리하는 알고리즘을 설명하는데 사용하는 비기술적 용어 또는 업무에 필요한 데이터 처리를 수행하는 응용 프로그램의 일부를 의미하며, 데이터 입력, 수정, 조회 및 보고서 처리 등을 수행하는 루틴으로 생각할 수 있습니다. 예를들어, 회원가입 시 아이디 중복 확인하기 -> 회원 정보가 저장된 DB에 접근 -> DB에 중복되는 ID가 있는지 검색 -> ID 중복 여부에 따른 처리 -> DB 연결 종료 -> View 데이터 전달 이런 동작 또는 행위를 비즈니스 로직이라고 생각하면 됩니다. 비즈니스 로직을 얼마나 잘작성하냐에 따라 유지보수와 확장성 등에 영향을 주며, 이런 점에서 좋은 품질인지를 파악할 수 있겠죠. 리포지토리 패턴이 탄생하게된 ..
AppCompatButton이란? AppCompat 라이브러리는 모든 Android 버전에서 앱에 최신 테마를 적용하는데 도움이 된다고 합니다. 레이아웃 파일을 확장하게되면 AppCompat 라이브러리가 일부 구성 요소를 AppCompat 버전 (AppCompatButton, AppCompatTextView 등)으로 전화합니다. AppCompatButton은 Button의 하위 클래스지만 일부 테마 지원이 내장되어 있습니다. 즉, 일반 Button을 생성하는 경우 Background 및 테마 등이 적용되지 않는 경우가 많은데 이런 경우 AppCompatbutton으로 생성하면 해결할 수 도 있다고 합니다.
DI(의존성 주입) 프레임워크 : Dagger2란 Dagger2란? Dagger2는 자바와 안드로이드를 위한 빠른 의존성 프레임워크 입니다. Dagger2는 리플렉션을 사용하지 않고, 런타임에 바이트 코드도 생성하지 않는 것이 특징이며, compile time에 어노테이션 프로세서에 의해 의존성 주입과 관련된 모든 코드를 분석한 후 자바 소스 코드를 생성합니다. Dagger2의 가파른 학습 곡선 어노테이션 기반의 코드 생성 방식이 익숙하지 않아 내부가 어떤 식으로 동작하는지 유추가 어려움 다른 DI 라이브러리보다 공부해야할 부분이 더 많음 Component, Subcomponent, Module 등과 같은 Dagger에서만 사용하는 용어로 인해 혼란스러움 그래서일까... 의존성 주입을 공부하다, Dagger2에서 어려워서 포기한 적 있습니다. Dagge..
Dependency Injection : 의존성 주입 1. DI(의존성 주입) DI를 그대로 번역한 의존성 주입이란 용어를 사용해 "무슨 뜻이야?"라는 생각이 듭니다. 찬찬히 알아보겠습니다. 우선 의존성 주입(DI)의 개념은 "하나의 객체에 다른 객체의 의존성을 제공하는 기술"을 말합니다. "객체 지향에서 두 클래스 간의 관계"를 의미하는 의존성과 "생성자 또는 메서드 등을 통해 외부로부터 생성된 객체를 받는 것"이 주입이 합쳐진 것이죠. 2. DI의 장점 의존성 주입은 인터페이스를 기반으로 설계되어, 코드가 유연 주입하는 코드만 따로 변경하기 쉬워 리팩토링이 수월 의존성 주입으로 인해 stub, mock 객체를 사용해 유닛 테스트의 이점 (가장 큰 장점) 클래스 간의 결합도를 줄일 수 있음 인터페이스를 기반으로 설계해, 개발자로 하여금 서로 사용하는 클래..
Part.2 - Android Application design principle 1. 안드로이드 애플리케이션 설계 원칙 앱 제작 과정에서 액티비티 또는 프래그먼트 같은 UI 컴포넌트에 Context, View, 데이터, 시스템 이벤트 등을 쉽게 참조할 수 있다는 이유로 많은 코드를 작성하는 경우 단점이 존재합니다. 예외 사항들에 대응이 힘듭니다. 거대해진 코드로 인한 가독성 저하 유지보수가 어렵다 그러므로 액티비티와 프래그먼트의 클래스 의존성은 최소화하는 것이 좋으며, 가장 중요한 원칙은 관심사 분리로, SOLID 원칙과도 많은 부분이 부합되며, 이를 통해 클래스 간의 의존성을 낮추어 모듈화 시킨다는 의미입니다. 즉, 관심사 분리를 통해 모듈화를 성공적으로 마치게되면, 애플리케이션의 설계, 배포, 유지보수 측면에서 이점이 생기고, 코드 또한 단순화됩니다. *모듈 : 다른 모듈로부터 ..
안드로이드 개념) WorkManager를 사용한 백그라운드 작업 - kotlin android-developers.googleblog.com/2018/10/modern-background-execution-in-android.html Modern background execution in Android Posted by Luiz Gustavo Martins, Partner Developer Advocate, Partner DevRel This is the third in a series of blog posts in which outli... android-developers.googleblog.com WorkManager 란? WorkManager는 Android Architecture Component 중 하나로, Android Jetpack에 속합니다. WorkManager는 ..
[Android] 비동기 처리를 위한 방법 동기와 비동기란? 동기(Synchronous) : 작업을 수행하고 그 작업이 완료될 때까지 다른 작업을 하지못하고 기다리는 방식 비동기(Asynchronous) : 어떤 작업을 수행하지만 완료와 상관없이 계속해서 작업을 할 수 있는 방식 비동기가 필요한 이유? 애플리케이션이 실행되면 메인액티비티가 메모리에 로드되고, Main Thread를 포함한 프로세스가 생성되게 됩니다. Main Thread에서 5초 이상의 작업을 실행하면 ANR(애플리케이션 응답 없음)이 발생하며, 안드로이드에서 초당 60프레임을 지원하는데, UI를 그리는 작업 중 한 프레임을 16ms 내에 그려내지 못하면 jank(프레임 누락으로 인해 끊겨보이는 현상)가 발생합니다. 즉, 안드로이드에서는 Main Thread는 중요하며 원활한 작..