본문 바로가기

전체 글12

채팅 메시지 Badge 커스텀 뷰 구현 (Feat. MeasureSpec) 제 채팅 앱 프로젝트에서 메시지 배지 기능을 추가하게 되었습니다. 이 기능을 추가하면서 MeasureSpec에 관해 조금 해맸기 때문에 기록으로 남깁니다. 요구사항 카카오톡, 라인, iOS 등의 배지 형태는 대충 이런 모습입니다. 이처럼, 최소 1:1 비율로 유지하고 있다가, 글자 수가 많아지면 너비가 늘어나는 배지를 구현할 것입니다. 해결 과정 간단하게 TextView에 빨간 백그라운드 컬러를 입히고 layout_width에 wrap_content 속성을 줬습니다. layout_width="wrap_content" layout_height="wrap_content" 당연하게도 너비가 높이보다 짧은 상황이 존재하게됩니다. 여기서 layout_constraintDimensionRatio="1:1" 옵션을 .. 2023. 7. 1.
프로그래머스 문제 풀이 : 숫자의 표현 (C++) https://school.programmers.co.kr/learn/courses/30/lessons/12924 🗒️ 문제 레벨 : 2 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. 제한사항 n은 10,000 이하의 자연수 입니다. ✍️ 풀이 연속된 자연수들의 합은 다음과 같이 일반화 할 수 있습니다. n은 .. 2023. 6. 16.
Compose 컴파일러 Part 2 : Compose annotations @Composable @Composable에 관한 내용을 살펴보시려면 아래 링크를 참고하시기 바랍니다. https://ducorner.tistory.com/11 Compose 내부 구조 이 글은 2020.08.29에 작성된 Compose 세부구현에 관한 문서를 바탕으로 정리한 글이므로, 포스팅 작성 시기의 세부구현과는 다를 수 있음을 알려드립니다. 원문 : https://medium.com/androiddevelopers/under-the- ducorner.tistory.com @ExperimentalComposeApi 아직 안정화되지 않은 Composable이나 클래스에 적용되는 어노테이션입니다. 향후 변경될 수 있거나, 제거될 수 있음을 암시합니다. @ComposeCompilerApi 이 어노테이션은.. 2023. 4. 13.
Gap buffer 텍스트 편집기를 구현하려고합니다. 글자들을 배열에 나열했다고 상상해봅시다. 편집기에서 글을 쓰면서 글자 삽입, 삭제가 빈번하게 일어납니다. 일반적으로는 삽입 및 삭제가 일어날 때마다 삽입 및 삭제된 위치의 다음 데이터들이 한 칸씩 밀리거나 당겨지는 작업이 수행되므로 O(N)의 시간이 소요될 것입니다. 여기서 더 효율적으로 개선할 방법이 있을까요? 우선, 텍스트 편집기는 현재 커서 근처에서 삽입 및 삭제가 빈번하게 일어날 확률이 높습니다. Gap buffer는 이러한 특성에 효율적인 자료구조입니다. 작동 방식 먼저 사용할 공간들을 확보합니다. 이렇게 확보된 공간을 Gap이라고 부릅니다. HELD를 입력해봅시다. 현재 커서에서 바로 글자를 삽입하여 O(1)의 시간이 소요됩니다. 여기서 HELD를 HELLOW.. 2023. 3. 30.
Compose 내부 구조 이 글은 2020.08.29에 작성된 Compose 세부구현에 관한 문서를 바탕으로 정리한 글이므로, 포스팅 작성 시기의 세부구현과는 다를 수 있음을 알려드립니다. 원문 : https://medium.com/androiddevelopers/under-the-hood-of-jetpack-compose-part-2-of-2-37b2c20c6cdd Under the hood of Jetpack Compose — part 2 of 2 Under the hood of Compose medium.com @Composable Compose를 사용해보셨다면, 많은 코드에서 @Composable 어노테이션을 보셨을겁니다. 하지만 Compose는 어노테이션 프로세서가 아닙니다. Compose는 Kotlin 타입 체킹과 코.. 2023. 3. 30.
Compose 도넛홀 스키핑 (Donut-hole skipping) Composition 초기 Composition시 처음으로 Composable을 실행할 때 Composition에서 UI를 기술하기 위해 호출하는 Composable를 추적합니다. 그런 다음에 앱 상태가 변경되면 Recomposition을 예약합니다. Recomposition은 Compose가 상태 변경사항에 따라 변경될 수 있는 Composable을 다시 실행한 다음 변경사항을 반영하도록 Composition을 업데이트하는 것입니다. Composition 초기 Composition을 통해서만 생성되고 Recomposition을 통해서만 업데이트될 수 있습니다. Composition을 수정하기 위해서는 Recomposition을 이용해야합니다. Composition 공식문서를 참고해주세요. https:/.. 2023. 3. 28.
Compose 컴파일러 Part 1 : A Kotlin compiler plugin Compose 컴파일러는 Kotlin 컴파일러 플러그인입니다. Compose를 사용해보신 분이라면 Kotlin 함수에 @Composable 어노테이션을 붙인 함수는 Composable 함수로 변환되는 것은 알고 계실겁니다. 보통, 코틀린에서 어노테이션 처리는 kapt이나 ksp 의해 이루어집니다. 하지만 Compose는 일반적인 어노테이션 프로세서로 처리하지 않습니다. Compose 컴파일러는 코틀린 컴파일러의 플러그인입니다. 자바로 Compose를 사용할 수 없는 이유이기도 합니다. 우선 kapt 작동 방식을 생각해봅시다. 코틀린에는 자체적으로 어노테이션 프로세싱을 지원하지 않기 때문에, 자바의 어노테이션 프로세서를 이용해야하고, 그걸 이루는 것이 kapt이죠. 덕분에 자바 Stub이 생성되고, 절차가.. 2023. 3. 21.
[KotlinConf 2019 시리즈] Part 4 : Coroutines & Patterns for work that shouldn’t be cancelled 이 글은 아래의 문서를 바탕으로 정리된 글임을 알려드립니다. 원문 : https://medium.com/androiddevelopers/coroutines-patterns-for-work-that-shouldnt-be-cancelled-e26c40f142ad Coroutines & Patterns for work that shouldn’t be cancelled Cancellation and Exceptions in Coroutines (Part 4) medium.com 목차 Part 1 : CoroutineScope, Job, CoroutineContext Part 2 : Cancellation in coroutines Part 3 : Exceptions in coroutines Part 4 : Cor.. 2023. 3. 20.
[KotlinConf 2019 시리즈] Part 3 : Exceptions in coroutines 이 글은 아래의 문서를 바탕으로 정리된 글임을 알려드립니다. 원문 : https://medium.com/androiddevelopers/exceptions-in-coroutines-ce8da1ec060c Exceptions in coroutines Cancellation and Exceptions in Coroutines (Part 3) — Gotta catch ’em all! medium.com 목차 Part 1 : CoroutineScope, Job, CoroutineContext Part 2 : Cancellation in coroutines Part 3 : Exceptions in coroutines Part 4 : Coroutines & Patterns for work that shouldn't.. 2023. 3. 18.
[KotlinConf 2019 시리즈] Part 2 : Cancellation in coroutines 이 글은 아래의 문서를 바탕으로 정리된 글임을 알려드립니다. 원문 : https://medium.com/androiddevelopers/cancellation-in-coroutines-aa6b90163629 Cancellation in coroutines Cancellation and Exceptions in Coroutines (Part 2) medium.com 목차 Part 1 : CoroutineScope, Job, CoroutineContext Part 2 : Cancellation in coroutines Part 3 : Exceptions in coroutines Part 4 : Coroutines & Patterns for work that shouldn't be cancelled 개요 코루.. 2023. 3. 18.
[KotlinConf 2019 시리즈] Part 1 : CoroutineScope, Job, CoroutineContext 이 글은 아래의 문서를 바탕으로 정리된 글임을 알려드립니다. 원문 : https://medium.com/androiddevelopers/coroutines-first-things-first-e6187bf3bb21 Coroutines: First things first Cancellation and Exceptions in Coroutines (Part 1) medium.com 목차 Part 1 : CoroutineScope, Job, CoroutineContext Part 2 : Cancellation in coroutines Part 3 : Exceptions in coroutines Part 4 : Coroutines & Patterns for work that shouldn't be cancelle.. 2023. 3. 18.
백준 15949번: Piet 풀이 (C++) 구현 문제답게 시키는대로 잘하면 풀 수 있는 문제입니다. 시키는대로 잘하십쇼 www.acmicpc.net/problem/15949 2020. 12. 1.