1월 4일부터 시작한 컴포즈 스터디가 2월 22일로 마무리를 했습니다. 스터디 인원은 8명이서 진행을 했고 그래도 적지 않은 인원으로 기대반 걱정반 하는 마음으로 스터디 자세에 임했습니다. 스터디는 핵심만 골라 배우는 젯팩 컴포즈 책의 내용을 매주 공부하고 학습한 내용들을 서로 공유하는 시간을 가졌습니다. 이 스터디의 목적은 컴포즈의 기본적인 내용을 학습하면서 컴포즈에 대한 이해도를 높이고 팁들을 공유하는 것입니다. 다행히 중간에 빠지는 사람 없이 모두들 매주 열심히 학습한 내용을 공유하였고 의미 있는 스터디가 되었습니다. 스터디 모임장께서 퀴즈나 과제 등으로 지루하지 않게 진행을 해주셔서 지루할 틈이 없는 스터디였습니다. 마지막으로 컴포즈 앱을 만들어보는 과제는 2명씩 팀으로 이루어서 앱을 만드는데 앱..
Photo by Mel Poole on Unsplash 요구사항 안드로이드 개발을 하다가보면 하나의 다음과같은 요구사항이 생기는 상황이 생깁니다. TextView 안에 2줄일 때는 14sp, 텍스트가 만약에 길어질 때는 3줄로 제한하면서 12sp로 변경 이런 요구사항을 어떻게 해결할 수 있을까요? 글자 수 초과 시 텍스트 사이즈를 변경하는 코드를 만들거나 Canvas를 이용해 글자의 범위가 넘어가면 측정하는 로직을 따로 작성할 수 있지만 단순한 동작을 위해 너무 많은 작업이나 코드를 생산하게 되는 일이 발생합니다. 다행히 안드로이드에서는 Android 8.0(API 26)이상을 사용한다면 TextView에 해당 기능을 지원하고 있습니다. 그 이전 버전은 AppCompat을 사용하여 다루어야하고 최소 버전..
Photo by David Marcu on Unsplash 문제 안드로이드에서 string 리소스에 텍스트를 추가하는데 다음과 같은 에러를 발생시킬 때가 있습니다. "sample_text" is translated here but not found in default locale 원인 해당 린트에러는 번역을 제공하지 않는 Locale에서 문자열을 조회하게 된다면 충돌을 발생할 수 있으니 주의하라는 내용인데요. 어느새 부터 가끔씩 value/strings.xml 파일에서 선언하면 발생했습니다. 현지화 작업을 하지 않는다면 보통은 이 문구를 신경쓰지 않아도 되지만 에러가 신경쓰여서 해결해보려고합니다. 해결 방법들 Android Studio - Preferences - Inspections - Extra tr..
안녕하세요. 이번 글에서는 얕은복사(Shallow Copy)와 깊은복사(Deep Copy)에 대해서 알아보려고합니다. 자바나 코틀린으로 개발을 하다보면 객체를 복사할 일이 생기는데 이 때 주의해서 복사하지 않으면 의도치 않은 결과를 마주할 수 있습니다. 객체를 복사하는 방법은 크게 얕은복사(Shallow Copy)와 깊은복사(Deep Copy) 두 가지 방식이 있습니다. 얕은 복사(Shallow Copy) 얇은 복사는 원본 객체에 대한 객체를 만들고 원본 객체의 주소값을 참조하는것을 의미합니다. 객체는 인스턴스화 되면서 메모리에 주소를 할당하게 되는데요 이 때 할당된 주소의 값을 참조하게 되는 것이 얕은 복사라고 합니다. 코드로 한번 어떤 의미인지 살펴보겠습니다. public class User { in..
동시성(Concurrency) 동시성(Concurrency)은 Task들이 빠르게 전환하면서 실행되어 동시에 실행되는 것처럼 보이는 것입니다. 싱글 코어에서도 여러 작업은 동시적(Concurrent)으로 실행되며 Task간의 Context Switch가 발생하면서 여러 작업들을 동시에 실행하는 것처럼 보이게합니다. 하지만 동시성은 싱글 코어에서만 실행되는 것을 의미하지 않고 실제로는 멀티 코어에서 실행되는 상황이 더 많습니다. 즉, 동시성은 독립적인 작업을 작은 단위의 연산으로 나누어 시간 분할 형태로 연산하고 논리적으로 동시에 실행하는 것처럼 보이게하여 유휴 시간(Idle Time)을 최소화 하는 구조나 개념을 의미합니다. 📘 유휴시간이란? 컴퓨터가 작동 가능한데도 작업을 하지 않는 시간을 의미합니다...
들어가며 최근 컴포즈 스터디모임에서 논의된 내용으로 컴포즈에서 ViewModel을 생성할 때 viewModel()을 이용한 생성과 hiltViewModel()을 이용한 생성이 구체적으로 어떻게 다른지에 대한 논의가 있었습니다. ViewModel을 생성하는 두개의 방법이 어떤 차이가 있는지 알아보겠습니다. 설정 dependencies { implementation("androidx.navigation:navigation-compose:2.5.3") implementation("androidx.hilt:hilt-navigation-compose:1.0.0") } ViewModel 생성 기존 안드로이드에서 일반적으로 액티비티나 프래그먼트를 이용해 화면 단위를 구성했습니다. 각 컴포넌트에서 ViewModel 생..