Kotlin DSL DSL(Domain Specifit Language)은 특정 분야에 특화된 언어를 말합니다. Gradle은 Groovy라는 DSL을 사용하는데 KTS를 통해 Kotlin으로 Gradle을 구성할 수 있습니다. 특징 Groovy 언어로 매우 오랜 시간 잘 사용했고, 문제점이 없었기 때문에 굳이 KTS를 사용할 필요가 있을까 싶지만 가장 큰 장점은 Kotlin을 사용하는 점이라고 생각합니다. 다른 언어를 배울 필요없이 친숙하고 쉽게 구현할 수 있기 때문입니다. 친숙한 구문 컴파일 과정에서 에러 확인 Android Studio 적극 지원 하지만 장점만 존재하는 것은 아닙니다. 실제 Clean 작업 후 Build를 거치면 Groovy보다 느리다고 합니다.(링크) 적용 방법 1. buildSr..
ConcatAdapter RecyclerView 1.2.0에서 새롭게 출시한 어댑터입니다. 이름에서 알 수 있듯 여러 어댑터를 연결하는 역할을 합니다. 기존 어댑터의 문제점은 하나의 어댑터에서 여러 ViewHolder를 관리할 때 객체 지향의 의미가 퇴색되고 코드가 쉽게 더러워졌습니다. ConcatAdapter를 통해 하나의 RecyclerView에서 여러 ViewHolder를 쉽게 관리할 수 있고, 기존 Adapter를 연결할 수 있습니다. 사용법 사용법은 매우 간단합니다. 생성자로 vararg 형태로 기존 Adapter를 넘겨주면, 순서대로 RecyclerView에 표시됩니다. 또한 데이터가 변경됐을 때 adapter의 notifyDataSetChanged(), ListAdapter라면 submitL..
signingConfigs Android에서 Build를 할 때 Sining Key는 필수 사항이다. 물론 debug 모드로 빌드를 진행하면 Android Studio 내부에서 기본으로 제공하는 Key로 빌드를 하지만 앱을 배포하거나 BuildVariant를 release로 바꾸면 Key를 요구하며 때로는 debug Key를 개발자가 수정하는 경우가 생긴다. build.gradle 설정 signingConfigs 프로젝트에서 사용할 키를 signingConfig 함수를 통해 설정한다. build.gradle에 Key에 대한 정보를 바로 기입할 수 있지만, properties에 변수로 선언하여 사용할 수 있다. android { signingConfigs { debugKey { storeFile file(..
SourceSets 프로젝트를 진행하면 빌드 유형(debug, relase...), 제품 버전(유료, 무료...) 등 다양한 이유로 특정 부분의 소스 코드를 여러 버전으로 관리할 경우가 생깁니다. 간단하게 파일 복사나 Git Branch로 관리할 수 있지만 SourceSets을 사용하면 쉽게 관리할 수 있습니다. src/main 기본적으로 src/main에 코드를 작성하고 있습니다. main에는 모든 유형에 대해 공통적인 코드를 작성합니다. SourceSet 생성 app/src에 새로운 유형을 생성합니다. Gradle은 개발자가 src/main과 비슷한 방식으로 디렉토리를 구성할 것으로 예상합니다. 그렇기 때문에 다른 SourceSet을 생성할 때 src/main 같은 형식으로 디렉토리를 구성해야 합니다..
Cold Observable Cold Observable은 Observable를 생성하고 Observer가 subscribe를 호출할 때 데이터 발행을 시작합니다. 즉, Observer가 없으면 데이터를 발행하지 않습니다. 다른말로 Lazy하게 데이터를 발행한다고 표현합니다. 일반적으로 One Time 질의(DB 조회, API 호출, File IO 등)에 사용하고, 원하는 시점에 요청하여 결과를 받아오는 작업에 쓰입니다. * 지금까지 예시로 사용했던 Single, Maybe 등이 Cold Observable에 속합니다. Hot Observable Cold와 반대로 Observable를 생성하면 Observer 유무의 상관없이 데이터를 발행합니다. 중간에 Observer가 등록되어 subscribe를 시작..
브랜치를 합치는 방법에는 크게 merge와 rebase가 있습니다. 두 방법의 차이는 크게 커밋 히스토리가 달라집니다. merge 커밋 순서를 바꾸지 않습니다. 존재하는 브랜치가 변경되지 않습니다. 새로운 merge commit이 생깁니다. 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해집니다. rebase 커밋 메시지가 시간 순서대로 합쳐집니다. 히스토리가 좀 더 깔끔해집니다. 원래의 커밋 이력이 변경되기 때문에 정확한 이력을 남겨야 할 필요가 있을 경우 사용하면 안됩니다. rebase는 base를 새롭게 설정한다는 의미이고, 커밋 메시지가 좀 더 깔끔해지는 특징이 있습니다. rebase명령어를 통해 커밋 히스토리를 깔금하게 브랜치를 병합할 수 있습니다. user@AL01724100 G..
변수(Variable) 값을 저장하기 위한 수단입니다. 유저에게 값을 입력 받거나 연산 도중 값을 저장해야 할 경우 변수에 저장합니다. Dart에서 변수는 C, Java, Kotlin, Python을 섞은 느낌입니다. num 숫자를 저장하기 위한 Class 기본적으로 Object를 상속받고 있습니다. int : 정수를 저장하기 위한 타입 double : 소수를 저장하기 위한 타입 여기서 Dart의 언어 특성으로 인한 다른 언어의 차이점인데 변수의 범위가 실행 환경에 따라 달라진다. Dart언어 특성상 Web, Android, iOS 등 다양한 플랫폼을 지원하고 각 플랫폼마다 조금씩 차이가 있다. (기본적으로 64bit를 지원한다고 생각하면 편함) https://dart.dev/guides/language..
Coroutine Coroutine은 동기/비동기를 효율적으로 프로그래밍하기 위한 하나의 동시성 프로그래밍 설계 개념입니다. Kotlin뿐만 아니라 다른 언어에도 존재하는 개념이고 오래된 개념입니다. Android에서 Coroutined은 비동기적으로 실행되는 코드를 간결하게 작성할 수 있고, Thread보다 성능이 좋으며, Jetpack에서 많은 기능을 지원하는 장점이 있습니다. Thread vs Coroutine Thread는 고유한 Stack가 할당되며 동시성을 보장하기 위해 OS가 스케쥴링을 하여 적합한 Thread를 실행하고 Context Switching으로 인한 오버헤드가 발생하고 중지된 Thread는 OS의 선택을 받기 위해 기다립니다(Blocking한다고 표현함). Coroutine은 L..
- Total
- Today
- Yesterday
- Flowable
- clean code
- rxjava
- TDD
- Exception
- DSL
- DART
- 연산자
- CancellationException
- viewmodel
- Widget
- Flutter
- 코루틴
- observable
- gradle
- Coroutine
- ViewModelStoreOwner
- commit
- git
- 보이스카우트 규칙
- ConcatAdapter.Config
- ConcatAdapter
- isActive
- Android
- 클린코드
- null
- 클린 코드
- 함수
- ViewModelProvider
- Kotlin
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
