Android

Jetpack Compose Jetpack Compose는 안드로이드 앱의 UI를 쉽게 디자인하고 빌드하기 위한 라이브러리이다. Compose가 만들어진 목표는 다음과 같다. 맞춤 레이아웃을 쉽게 작성 고성능을 발휘 맞춤 레이아웃을 쉽게 작성 기존 안드로이드에서 xml로 View를 그리고 코드 상에서 setContentView나 inflate 메서드를 이용해 해당 View 을 로드해야 했다. Jetpack Compose를 이용하면 이전과 달리 compose에서는 코드 상에서 UI에 대한 모든 관리를 하게 된다. 이로 인해 View가 작성되기 쉬워지게 된다. 기존 방식 예를 들어 textView에 동적으로 "Kotlin World Blog" 라는 텍스트를 출력하고 싶다고 해보자. 기존에는 다음과 같은 방식..
Koin이란 Kotlin으로 DI를 공부하면서 가장 먼저 접하는 라이브러리는 Kotlin DSL로 만들어진 Koin이다. Kotlin DSL로 만들어졌다보니 Kotlin에 익숙한 개발자라면 사용하기 어렵지 않으며, Koin은 Dagger에 비해 구성요소가 복잡하지 않아서 Koin을 배우는 것은 러닝 커브가 낮다고 한다. 하지만 Koin은 리플렉션을 이용해 런타임에 오브젝트 그래프를 그려주다보니(=의존성 주입을 하다보니) 앱 성능이 저하된다는 단점이 있다. 따라서, 큰 규모의 프로젝트에서 Koin을 사용할 경우 Application이 시작될 때 의존성 그래프가 그려지다 보니 화면이 멈춘것처럼 될 수 있다. 따라서 큰 규모의 프로젝트에서는 컴파일 타임에 의존성 그래프를 그려주는 Dagger-Hilt을 이용해..
Dagger2란? Dagger2란 Java/Kotlin을 위한 의존성 주입 프레임워크이다. Dagger2에 Hilt를 결합한 버전인 Dagger-Hilt가 대세가 되고 있고, 다른 DI Framework과는 달리 컴파일 타임에 연산을 처리하여 런타임의 성능이 다른 DI Framework에 비해 나으므로 Dagger-Hilt가 대세가 될 것은 명백해 보인다. 하지만 다른 DI Framework들에 비해 새로운 개념이 많이 나와서 러닝커브가 높아 배우는데 시간이 오래 걸려 포기를 하고는 한다. (실제로 내가 Dagger2를 공부하는데도 시간이 오래 걸렸다ㅠ) 나는 공부를 하는데 왜 오래 걸리는지 이유를 찾았고, 그 이유로 명확한 예시가 없다. 설명이 모호하다. 지식이 파편화 되어 있다. 설명이 여러곳에 퍼져..
지금까지는 하나의 컴포넌트만 사용하였다. 하지만, 안드로이드 프레임워크 같은 곳에서는 여러 컴포넌트들 간에 의존 관계가 필수적이다. 어플리케이션은 여러 액티비티(Activity)를 포함하며, 각 액티비티는 여러 프레그먼트(Fragment)를 포함할 수 있다. 즉, 각 Component들은 의존 관계가 생긴다. 따라서 의존 관계가 있는 컴포넌트는 상위 컴포넌트에 대한 참조를 포함해야 한다. Dagger2에서는 이를 위해 모듈에 포함할 수 있고, 상위 프로바이더를 사용할 수 있는 서프컴포넌트를 제공한다. 서브 컴포넌트(SubComponent) 서브 컴포넌트란 어떤 컴포넌트의 하위에 포함되는 컴포넌트를 뜻한다. 정확히는 모듈 내부에 포함되는데, 이를 통해 해당 서브컴포넌트는 부모 모듈과 컴포넌트의 프로바이더를..
예제 링크 : https://github.com/seyoungcho2/Dagger2Example 이 글은 예제7,8,9과 함께 한다. Scope란? Dagger2의 역할은 외부에서 의존성을 주입해주는 것이다. 여기서 문제점이 생긴다. 외부(Container)에서 제공하는 인스턴스들이 한 번만 생성되어도 되는데 호출할 때마다 생성된다면 불필요한 메모리 사용이 생긴다. Dagger2에서는 이를 해결하기 위해 Scope Annotation을 이용해 같은 범위(Scope)의 내에서 객체들을 관리하게 된다. Scope Annotation이 적용된 Provider은 범위(Scope) 내에서 한 번만 객체를 생성한다. Dagger에서는 Scope Annotation을 이용해 한 번 생성된 객체가 재사용되는 범위(Sc..
Dev.Cho
'Android' 태그의 글 목록 (12 Page)