전체 글 56

[회고] 2년차 안드로이드 개발자, 커리어 시작부터 첫 이직까지 회고 (2022.04~2023.10)

포스팅 계기 이직 약 1.5년 정도 다닌 첫회사를 나오고 약 2~3개월의 백수기간을 거쳐 1월 중순에 새로운 회사로 출근하게 되었다. 2022.04~2023.12 동안 개발자 커리어를 시작하고 이직하며 잘한점 못한점을 돌아보고 앞으로 어떻게 더 잘할지 고민해보고 2024년 목표를 세우는 시간을 가져보려고 한다. 왜 공개포스팅인가? 사실 나는 내 회고를 블로그에 쓰는 것에 대해 회의적이었지만 타인의 회고를 보고 받은 긍정적 영향으로 공개포스팅하게 되었다. 나는 23년 6월부터 매일 회고를 해왔다.(이전에도 간간이 했지만 매일 실천한 것은 6월부터), 다만 개인적으로 해왔다. 회고를 블로그로 작성하지 않은 이유는 성공포르노가 판을 치는 세상에서 나의 경험이 초라해보였고 아무에게도 어떤 형태로라도 딱히 도움되..

회고 2024.01.12

(WIP) "목표 리마인더: 당신의 목표를 잠금해제" 도움 글

1. "목표 리마인더" 를 소개합니다 📢 사람들은 왜 목표 달성 왜 목표 달성을 어려워할까요? 1. 목표 달성의 가장 큰 방해요소는 목표를 잊어버리기 쉽다는 것입니다. 목표를 잊어버린 상태로 하는 행동을 목표를 달성하기 어렵게 만듭니다. 2. 두 번째로 큰 방해요소는 당장 오늘 해결할 수 있는 수준으로 목표를 작게 나누지 않는다는 것입니다. 목표를 위해 당장 오늘 해결할 수 있는 문제를 모른다면 쉽게 지치고 포기하게되어 목표를 달성하기 어렵게 만듭니다. 자신이 하는 어떤 행위가 어떤 목표를 위해서 하는 행위인지도 모르게 만들죠. ‘목표 리마인더’ 앱은 두 가지 방해요소를 어떻게 해소해주나요? 1. ‘목표 리마인더’는 스마트 폰을 열 때마다 목표를 상기하여 목표를 잊어버리지 않게 도와줍니다. Dscout사..

카테고리 없음 2023.07.03

[Android/Kotlin] Jetpack Compose 로 무한 롤링 배너(a.k.a Infinite loop/Infinite scroll) 를 쉽게 만들어보자

1. 들어가며 회사에서 Compose 마이그레이션을 반년째 진행중이다. (오래걸리는 이유는 시간을 잡고 한번에 바꾸는 게 아니라, 매 스프린트 마다 새로 들어가는 UI 를 컴포즈로 만들거나, 새로 들어가는 기능을 담은 화면을 리빌딩하는 방식을 채택했기 때문이다.) 최근에 홈화면을 개편하고 많은 앱에 들어가는 무한롤링 배너도 컴포즈로 갈아끼우는 작업을 하였다. 그리고 컴포즈로 구현하는 것의 장점을 또 한번 느꼈고, 많은 앱에 들어가는 기능이기도 하니 구현한 내용을 행복했던 감정과 함께 글로 정리하려고 한다. 각설하고 바로 구현만 보고싶으시다면 4번부터 보면 된다. *참고로 필자가 진행하는 컴포즈 버전은 1.4.2 이다. 아마 예에전 버전을 사용하시거나 accompanist 의 컴포넌트를 사용한다면 구현 내..

카테고리 없음 2023.05.28

[후기] 2023 찰스의 안드로이드 컨퍼런스를 다녀온 후기

*내년에 찰스의 안드로이드 컨퍼런스를 생각하시는 분 또는 참석하셨던 분이 그랬구나 하시면서 보면 좋을 것 같습니다 (제 개인적인 이야기는 스킵하셔도 좋을듯..! 바로 시작.) 가게된 과정 찰스라는 닉네임은 첫 런칭 프로젝트를 할 때 디자인 패턴을 공부하다가 알게되었는데, 글이 가독성있고 이해하기 쉽고 명쾌하게 설명해주셔서 몇 개를 보다가 책도 보게되었다. 그런 와중에 컨퍼런스의 존재도 알게 되었는데, 티켓팅에 잼병이고.. 당시에(는 시간은 많았지만) 부끄러움이 극에 달한 탓에.. 눈팅만하다가 단톡방에서도 숙청(?)도 당하고 컨퍼런스도 참여하지 못하고 했었다..ㅎㅎ 그러고 첫 컨퍼런스 참석으로는 작년 11월에 GDG devfest 2022 였고, 그 이후로 오랜만에 가는 컨퍼런스라 설렜다. 취준하면서 다시..

카테고리 없음 2023.05.23

[Kotlin] 멤버참조 문법과 예시, 람다의 컴파일에 대해 알아보자!

다른 글에서 람다를 알아보며 멤버참조에 대해서 짧게 알아본 적이 있다. (링크) 유용한 사용 예시는 람다함수를 인자로 넣는 것이었다. 람다를 인자로 받는 함수에 인자로 넘기려는 코드가 이미 함수로 선언된 경우 멤버 참조를 사용하여 짧은 코드로 작성할 수 있었다. 하지만 내용이 너무 빈약하여 추가로 그 원리가 무엇인지 정리하려고한다. 그래도 그 전에 다시 리마인드 해보자. 멤버 참조? 문법적으론 이중콜론 (::) 을 사용하여 멤버를 참조할 수 있다. 아래와 같은 형태이다. 클래스이름::멤버이름 멤버참조는 그 멤버를 호출하는 람다와 같은 타입이다. 멤버 참조는 프로퍼티나 메서드를 단 하나만 호출하는 함수 값을 만들어준다. 추가적인 규칙은 다음과같다. 다른 클래스의 멤버가 아니고 최상위에 선언된 함수나 프로퍼..

Kotlin 2023.01.23

[Kotlin] by lazy 의 정체와 함께, "위임 프로퍼티" 에 대해 알아보자

이 글을 쓰게 된 계기는 두 가지이다. 먼저 by lazy 의 동작방식을 제대로 알아보고 싶다는 것이다. 그리고 다른 글에서 코틀린 연산자 관례에 대해 소개하고 여러 관례를 정리하였는데 (링크) getValue 와 setValue 메서드를 정리하지 않아서 찝찝했다. (invoke 는 여기서 마지막에 추가 정리했다..) 그래서 추가로 정리하고 위임 프로퍼티에 대해 알아보려고한다. (이해한대로 쓰기 때문에 읽다가 틀린 부분이 있다면 댓글로 말씀해주시면 매우 감사입니다.) 그럼 다시 리마인드 해야할 것 들을 알아보자. 배경지식 리마인드 관례? 코틀린에서 관례라고 하는 것은 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법이다. 예를 들면 코틀린에서 흔하게 사용하던 == 로 값을 비교하는 기능은 eq..

Kotlin 2023.01.22

Room 데이터베이스 복습 (nowinandroid 를 예로 간단히 살펴보기)

이번에 가벼운 사이트 프로젝트를 진행하는데, MVP 때는 서버 없이 작업하게 되었다. 그에 따라 로컬 데이터소스만을 활용해서 데이터를 관리해야해서 오랜만에 디비 셋업부터 여러 쿼리를 작성하게 되었다. 그래서 앞으로 입문부터 쿼리 예시, 마이그레이션, 서버와 동기화 등의 주제로 포스팅하려하는데 오늘은 그 시작인 입문이다. 왜 로컬에 데이터를 저장해야하는 경우가 생기는지, 왜 Room 을 쓰면 좋은지, 구성요소는 어떻게되고, 기본적인 사용예시까지만 소개하려한다. 로컬에 데이터를 저장해야하는 경우 예시 대부분 인터넷이 끊긴 경우에도 유용한 정보를 보여주기 위함이다. 네이버 웹툰을 즐겨 사용하는 안드로이드 유저라면 지금 인터넷 연결을 해제하고 네이버 웹툰을 들어가보았을 때 인터넷이 끊겼음에도 배너를 제외한 홈화..

Android/Room 2023.01.15

[Kotlin] 코틀린의 연산자 관례 정리, 어떤 클래스든 연산시켜보자!

코틀린에서 숫자가 아닌 객체에 대해서도 + - * / 등의 연산을 하는 경우를 보았을 것이다. 또한 컬렉션도 배열도 아닌 타입이 [] 로 프로퍼티에 접근한다든지 하는 것도 보았을 것이다. 예를들면 컴포즈에서 사용하는 Offset 클래스이다. (본 글이 어떤 Offset 이 어떤 클래스인지 논하는 글은 아니므로 Offset 은 x, y 라는 프로퍼티를 가지고 있고 있는 클래스라는 것에 집중한다.) 아래와 같이 Offset 끼리 연산해서 새로운 Offset 을 만드는 예시를 살펴보자 Offset(1f, 2f) + Offset(2f, 3f) 위 연산이 가능한 이유는 Offset 클래스가 plus 라는 이름의 특별한 메서드를 정의했기 때문이다. operator fun plus(other: Offset): Off..

Kotlin 2023.01.08

[Android/Compose] 헷갈려서 딱 정리하는 Compose 정렬(Alignment)과 배치(Arrangement)

들어가며 필자는 최근에 사이드 프로젝트에 Compose 를 사용해보았는데 헷갈리는 것들이 많았습니다. Compose 공식문서에 왼쪽 카테고리에 있는 모든 글을 읽고 코딩을 시작해서 헷갈리면 금방금방 찾아갈 수는 있었지만 그조차 시간이 아까운 경우가 있습니다. 그 시간 아깝게 헷갈리는 것들 중 하나가 바로 방향에 따른 Alignment 와 Arrangement 입니다. xml 에서의 gravity, layout_gravity 의 개념으로 접근했다가 더욱 헷갈렸던 기억이있어 잠깐 내려놓아야할 거 같습니다. Alignment(정렬) 컨테이너의 수직 방향 정렬방식 일반적으로, 상위 컨테이너 내부에서 컴포저블을 정렬하기 위해 상위 컨테이너의 alignment 를 설정. 그렇다면 컨테이너의 모든 하위 요소가 동일한..

Android 2023.01.06

[Kotlin] 흥미돋는 코틀린의 타입을 정리해보자

오늘은 Kotlin in Action 을 읽고나서, 코틀린의 타입 시스템에 대해서 정리해보려고 한다. 타입은 어떤 값들이 가능한지와 그 타입에 대해 수행할 수 있는 연산의 종류를 결정하는 것이다. 코틀린으로 코딩하는데 문제가 없고 편하다고 생각했던 사람에게도 큰 도움이 되는가 물을 수 있겠지만 나는 코틀린을 쓰면서 단순히 편하다고 느꼈던 것들에 대해, 코틀린 컴파일러 개발자가 왜 이렇게 만들었는지 말해주는 설계 의도를 보며 굉장한 재미를 느끼고있다. 그래서 단순한 사용 방법보다는 키워드와 클 틀로 정리해보려고한다. (틀린 부분이나 이견이 있다면 댓글 남겨주시면 매우 감사합니다ㅎㅎ) 코틀린의 원시타입 코틀린에서는 원시타입과 래퍼타입을 구분하지 않는다! 그래서 개발자는 항상 같은 타입을 사용하게 된다. 자바..

Kotlin 2023.01.05