'Android' 카테고리의 글 목록 (3 Page) — SH's Devlog

Android

Android/Kotlin(Java)

[Kotlin] Collections API - flatMap()

flatMap()이란? map의 모나드 버전. flatMap()을 통해 List를 평면화를 거쳐 새로운 List를 반환시킬 수 있습니다. public inline fun Iterable.flatMap(transform: (T) -> Iterable): List { return flatMapTo(ArrayList(), transform) } public inline fun Iterable.flatMapTo(destination: C, transform: (T) -> Iterable): C { for (element in this) { val list = transform(element) destination.addAll(list) } return destination } flatMap() 함수를 보면 수신..

Android/Basic

[Android] Gradle 프로젝트에 remote 라이브러리 대신 외부 모듈 불러오기

이번 포스트에서는 Android, Spring 혹은 다른 Gradle 빌드 시스템을 사용하는 프로젝트에서 외부 모듈을 불러오는 방법을 알아보겠습니다. 외부 저장소에서 라이브러리를 불러올 때의 문제점 안드로이드는 공식 빌드 도구로 Gradle을 사용합니다. 라이브러리를 불러와 빌드 구성을 할 때에는 Gradle 빌드 시스템 상의 module 수준의 빌드 파일에서 수행되며 jitpack, maven central같은 외부 저장소에서 implementation 키워드를 통해서 불러올 수 있습니다. 하지만, 위와 같이 외부저장소에서 라이브러리를 불러오는 경우에는 당연하게도 외부 저장소에 있는 소스코드이다보니 라이브러리를 즉각적인 수정을 하여 사용하기에는 무리가 있을 수 있습니다. 이러한 상황을 해결하기 위한 방..

Android/Basic

[Android] Multidex 설정하기, Proguard 난독화로 앱 용량 줄이고 빌드속도 줄이기

빌드 에러 메시지 The number of method references in a .dex file cannot exceed 64K. 혹은 아래와 같은 런타임 에러 메시지 java.lang.NoSuchMethodError: No virtual method getScanFilter()Lcom/aasd/BleScanFilter; in class Lcom/abcd$Companion; or its super classes (declaration of 'com.abcd' appears in /data/data/com.abcd/code_cache/.overlay/base.apk/classes2.dex) 코딩을 하다보면 위와 같은 빌드 에러메시지가 발생하는 경우가 있습니다. 안드로이드 프로젝트 같은 경우 기본적으로..

Android/Kotlin(Java)

[Kotlin/Java] 얕은복사 vs 깊은복사, Collection의 방어적 복사

[이 글은 NextStep Kotlin TDD, Refactoring, Clean Code 수업 중 공부한 것을 복습하고자 정리한 글입니다.] 얕은 복사란? 주소값 자체를 복사하는 것이다. 복사된 객체의 인스턴스는 원본 객체의 인스턴스와 같은 메모리주소를 참조합니다. -> 따라서, 같은 메모리 주소값을 참조하기 때문에 복사된 객체의 값이 변경되면 원본 객체의 값도 변경됩니다. 깊은 복사란? 새로운 메모리 공간에 객체의 모든 값을 복사하는 것이다. 원본 객체는 그대로 두고, 새로운 메모리공간에 원본 객체의 값들을 모두 복사합니다. -> 따라서, 다른 메모리 주소값을 참조하기 때문에 복사된 객체가 변경되어도 원본 객체는 영향을 받지 않습니다. 얕은복사의 문제점 자바(코틀린)에서는 기본적으로 '='를 사용하여..

Android/Kotlin(Java)

[Kotlin] Kotlin 예외처리 - require(), requireNotNull(), check(), checkNotNull()(feat. IllegalArgumentException, IllegalStateException)

Kotlin 예외처리 함수 require(), check() require(), requireNotNull() 함수 require() : 매개변수의 값이 참인지 체크, 거짓이라면 throw IllegalArgumentException requireNotNull() : 매개변수의 값이 null이 아니면 value를 반환, null이면 throw IllegalArgumentException * 일반적으로 IllegalArgumentException은 적절하지 않은 인자를 전달했을 때 발생시키는 Exception 함수 원형 // 참이 아니라면 throw IllegalArgumentException("Failed requirement.") public inline fun require(value: Boolean..

Android/TDD

[Kotlin/TDD] 프로젝트에 ktlint를 적용하기

NextStep 이펙티브 코틀린 with TDD, Refactoring, Clean Code에서 배운 ktlint 설정 법을 정리해보고자 합니다. 린트 검사로 코드 개선 테스트를 빌드하여 앱이 기능적 요구사항을 충족하는지 확인하는 것 외에도 린트를 통해 코드를 실행하여 코드에 구조적 문제가 없는지 확인하는 것이 중요하다. ktlint를 프로젝트에 적용하기 Kotlin Coding Convention과 Android Kotlin Style Guide를 기본으로 따르고 있다. Gradle Groovy 설정 (build.gradle) buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { class..

Android/Basic

[Android] Service 정리

1. Service 란? Service는 안드로이드 4대 컴포넌트 중 하나이며 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행됩니다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있습니다. 2. Service 종류 포그라운드 서비스: 알림창을 통해 서비스가 실행중인 것을 나타내줍니다. 대신, 시스템에 의해서 강제종료 당하지 않습니다. 백그라운드 서비스: 사용자에게 보이지 않고 작업을 수행합니다. 대신, 시스템에서 리소스가 부족할 경우 강제종료 당할 수 있습니다. (API ..

Android/UI & Animation

[Android] CustomView 알아보기

CustomView를 만드는 이유 Android에는 UI를 구성하는 데 사용할 수 있는 미리 빌드된 기본 클래스인 View 및 ViewGroup과 다양한 서브클래스(위젯 및 레이아웃)가 있습니다. 어플리케이션의 UI 요구사항에 요청하는 위젯의 기능과 UI가 안드로이드에서 기본으로 제공하는 위젯이 제공을 한다면 위젯을 골라서 사용하면 되겠지만, 기본으로 제공하는 위젯이 요구사항에 맞지 않다면 CustomView를 직접 만들어야 합니다. CustomView의 장점으로는 매번 레이아웃으로 일일히 만드는 것 보다 CustomView를 만드는 것이 앱의 생산성에 도움이 됩니다. CustomView를 만들기 위해서는 View 및 ViewGroup 혹은 안드로이드에서 제공하는 위젯을 상속받고 메소드와 레이아웃을 상속..

반응형
seunghwaan
'Android' 카테고리의 글 목록 (3 Page)