분류 전체보기 412

[Android] 이미지 로딩 라이브러리 - Coil

Coil은 Coroutine Image Loader의 약자이며 Kotlin Coroutines(코루틴)으로 만들어진 가벼운 Android 백앤드 이미지 로딩 라이브러리입니다. 코루틴자체가 내장이 되어 있어 코루틴 라이브러리를 별도로 설치하지 않아도 되는 장점이 있습니다. 장점 Glide, Fresco보다 상대적으로 가볍다. 코루틴이 기본이지만 메인까지는 아니며 심플함과 최소한의 보일러 플레이트(boilerplate)를 위하여 Kotlin의 기능을 활용하여 Kotlin을 잘 다룬다면 사용하기가 매우 쉽다. 메모리와 디스크의 캐싱, 메모리의 이미지 다운 샘플링, Bitmap 재사용, 일시정지/취소의 자동화 등등 수 많은 최적화 작업을 수행하므로 처리 속도가 굉장히 빠릅니다. 다이나믹 이미지 샘플링을 지원하며..

안드로이드 2021.05.17

Storage Scope

Storage Scope란? - 개별 앱 공간이 샌드박스 형식으로 격리되어 다른 앱의 파일에 직접 접근할 수 없게 하는 방식을 말합니다. targetSdkVersiond을 29로 올리면 아래와 같이 Deprecated 됩니다. @Deprecated public static File getExternalStorageDirectory() 공용 저장소에 접근할 때는 MediaStore 또는 Intent(ACTION_OPEN_DOCUMENT)를 사용해야 된다고 합니다. 공용 공간은 MediaStore을 통해서만 읽고 쓸 수 있습니다. 혹은 SAF를 사용해 파일을 가져올 수 있습니다. 저장소 Android Q이전 외부 저장소 : 외부 저장소 권한이 있으면 누구나 접근이 가능 - READ_EXTERNAL_STORA..

안드로이드 2021.05.14

ViewBinding

현재 가장 많이 사용되는 Data Binding의 목적은 View와 Model을 엮어주는 역할인데 많은 개발자들이 단순히 View에 대한 참조를 얻기 위한 목적으로 Data Binding을 사용하는 것을 보고, 구글에서 View에 대한 참조를 얻기 위한 목적으로 오늘의 View Binding이 탄생하게 되었다고 한다. 특징 - Null안전 : 뷰의 직접 참조를 생성하므로 유효하지 않은 뷰 ID로 인해 null포인터 예외가 발생할 위험이 없습니다. 또한 레이아웃의 일부 구성에만 뷰가 있는 경우 결합 클래스에서 참조를 포함하는 필드가 @Nullable로 표시됩니다. -유형 안전 : 각 바인딩 클래스에 있는 필드의 유형이 XML파일에서 참조하는 뷰와 일치하기 때문에 클래스 변환 예외가 발생할 위험이 없습니다...

안드로이드 2021.05.13

Kotlin apply, with, let, also, run 사용?

범위 지정 함수는 무엇을 하는가? 이 5가지 함수는 기본적으로 매우 비슷한 기능을 합니다. 이 함수들은 두가지 구성 요소를 가집니다. 수신 객체 수신 객체 지정 람다 (lambda with receiver) with, also, apply, let, run 은 아래의 3 가지 차이점 중 1 가지가 서로 다릅니다. 범위 지정 함수 의 호출시에 수신 객체가 매개 변수로 명시적으로 전달되거나 수신 객체의 확장 함수로 암시적 수신 객체 로 전달된다. 범위 지정 함수 의 수신 객체 지정 람다 에 전달되는 수신 객체가 명시적 매개 변수 로 전달 되거나 수신 객체의 확장 함수로 암시적 수신 객체로 코드 블록 내부로 전달 된다. 범위 지정 함수의 결과로 수신 객체를 그대로 반환하거나 수신 객체 지정 람다 의 실행 결과..

안드로이드 2021.05.11

Android 멀티 모듈

모듈은 안드로이드 디벨로퍼 사이트에 다음과 같이 정의 되어있습니다. 모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 프로젝트에는 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있습니다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그할 수 있습니다. 모듈 생성 새로운 모듈의 생성은 File - New - New Module과 같은 과정으로 이루어 집니다. Module(app)과 Android Library, Java Library의 차이 Module은 전체의 어플리케이션 없이 부분적으로 디버깅 할수 있고 테스트 할 수 있는 작은 부분이라고 할 수 있습니다. 반면, Android Library는 어플..

안드로이드 2021.05.11

Merge 이해하기 (Merge / Squash and Merge / Rebase and Merge)

Merge : 하나의 브랜치와 다른 브랜치의 변경 이력 전체를 합치는 방법이다. Squash and Merge : commit a + b + c를 합쳐서 새로운 commit, abc를 만들어지고 master에 추가된다. abc는 1개의 parent를 가진다. feature 브랜치의 commit history를 합쳐서 깔끔하게 만들기 위해 사용한다. my-branch의 여러 개의 history가 하나로 합쳐져서 새로운 commit을 생성한다. Rebase and Merge : 모든 commit들이 합쳐지지 않고 각각 master 브랜치에 추가된다. 참조 : im-developer.tistory.com/182

Git 2021.05.06

Wildcard(*) import 방지

kotlin을 사용하면 import java.util.Locale과 같은 wildcard import를 사용하지 못하게 한다고 한다. 이유는 명확하게 선언할 수 있기 때문에 실수를 줄일 수도 있고, 다른 패키지에 동일한 클래스가 존재할 수도 있고, Kotlin 같은 경우는 패키지 레벨의 함수도 선언할 수 있기 때문에 혼란이 있을 수 있다. 문제는 IntelliJ가 동일한 패키지에서 있는 클래스/함수를 5개 이상의 import를 사용하면 wildcard import로 바꿔 버린다. 자동으로 바꾸지 못 하도록 설정을 바꿔주자. IntelliJ 설정에서 Editor > Code Style > Kotlin 설정에서 아래와 같이 바꿔준다. Kotlin 클래스에서만 적용되는 내용이기 때문에, Java 같은 다른 언..

안드로이드 2021.05.03

Gradle Dependency 관리하기 (buildSrc)

Kotlin + buildSrc 의존성 관리와 IDE 자동완성 지원을 위해 kotlin 코드를 가지는 buildSrc 모듈을 만들 수 있다. Gradle 문서를 보면 Gradle이 수행되면 buildSrc 디렉토리가 존재하는지 체크한다. 이 경우 Gradle은 자동적으로 코드를 컴파일하고 테스트한 뒤 당신의 빌드 스크립트의 classpath에 넣는다. 어떤 추가적인 지시도 규정 할 필요가 없다. 1. 루트폴더에 buildSrc 폴더를 만든다. 2. buildSrc 폴더 안에 build.gradle.kts 파일을 생성한다. 3. 아래와 같이 작성한다. plugins { `kotlin-dsl` } // Required since Gradle 4.10+. repositories { jcenter() } 4. ..

안드로이드 2021.04.02

Android Dalvik & ART 차이

Dalvik VM과 Java VM의 컴파일 과정 비교 DVM과 JVM은 모두 JIT(=Just In Time) 컴파일러를 사용해 기계어로 번역한다. JVM에서는 .jar 파일을 기계어로 번역할 수 있기 때문에 .class 파일을 .jar 파일로 번역하는 작업이 필요한 것 처럼(.class 파일을 .dex 파일로 번역하는 작업은 Android SDK에 포함되어 있는 dx 툴을 이용한다.) DVM에서는 .dex 파일을 기계어로 번역할 수 있기 때문에 .class 파일을 .dex 파일로 번역하는 작업이 필요하다. Dalvik VM의 컴파일 방식 위에서 말했듯이 Dalvik VM의 컴파일 방식은 JIT(=Just In Time) 방식이다. 이 방식은 앱 구동 중에 실시간으로 컴파일(기계어 번역)을 하기 때문에 ..

안드로이드 2021.03.29

Android Context란?

Context 는 크게 두 가지 역할을 수행하는 Abstract 클래스 입니다. 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근하기 안드로이드 시스템 서비스에서 제공하는 API 를 호출 할 수 있는 기능 Context 인터페이스가 제공하는 API 중, getPackageName(), getResource() 등의 메서드들이 첫 번째 역할을 수행하는 대표적인 메서드입니다. Context 왜 사용할까? 안드로이드 플랫폼상에서의 관점으로 샆펴보면, Context 는 다음과 같은두 가지 역할을 수행하기 때문에 꼭 필요한 존재입니다. 자신이 어떤 어플리케이션을 나타내고 있는지 알려주는 ID 역할 ActivityManagerService 에 접근할 수 있도록 하는 통로 역할 Context 생성시점 Cont..

안드로이드 2021.03.29