본문 바로가기

전체 글

[Android] Coroutine에서는 왜 Thread보다 교착상태가 덜 발생할까? 안드로이드 개발을 하며 비동기 처리를 할 때는 주로 Thread보다 Coroutine을 많이 사용하는데요,왜 Coroutine에서는 Thread보다 교착 상태가 덜 발생할까요?   🔎 교착 상태란 (Deadlock) 교착 상태와 관련해서 이런 비슷한 이미지를 한 번쯤은 보셨을 것 같은데요,위 이미지처럼 교착상태는 여러 스레드 또는 작업이 서로의 자원을 기다리며 무한 대기하는 상황을 뜻합니다 이를 잘 이해하기 위해서 먼저 스레드와 코루틴이 공유 자원을 어떻게 다루는지 살펴보도록 하겠습니다   👀 스레드(Thread)에서 공유 자원 보호멀티 스레드 환경에서는 여러 스레드가 동시에 같은 자원 (ex. 변수, 파일, 네트워크 연결 등)에 접근할 수 있습니다이런 경우 데이터가 꼬이거나 충돌하는 것을 방지하기.. 더보기
[Jetpack Compose] Modifier 알아보기 xml에서 Compose로 넘어가며 UI를 그릴 때 가장 처음 마주하는(?) 부분이라고 느껴졌던 Modifier에 대해 정리해보려고 합니다   🎨 Modifier1. Modifier란?Modifier는 Compose에서 UI 컴포넌트를 변경하거나 꾸미기 위해 사용하는 데코레이터입니다.Modifier는 다음과 같은 역할을 합니다UI 요소 설정 : Modifier를 사용해 UI 요소의 레이아웃, 스타일, 상호작용 등을 변경 가능상호 작용 설정 (행동을 추가하기 위한 Modifier) : 클릭, 스크롤, 드래그, 확대/축소 등의 상호 작용을 설정 가능구성 요소 조합 : 여러 Modifier를 연결해서 사용할 수 있어, 다양한 스타일을 조합 가능주요 특징은불변성 (Immutable) : Modifier는 불변.. 더보기
우아콘 2024에 다녀왔다 ! https://2024.woowacon.com/ WOOWACON 2024한 번의 배달을 위해 필요한 모든 기술들2024.woowacon.com 배달의 민족 (우아한 형제들) 주관 컨퍼런스인 우아콘 2024 !우아콘은 추첨제라 작년엔 당첨되지 못해서 아쉬웠는데 올해는 운이 좋게 당첨이 되어서 다녀왔습니다 :) 사실 안드로이드 관련 세션은 다른 분야에 비해 많이 없었어서 세션에 대한 디테일한 내용보단 그냥 주관적인 후기,,ㅎㅎ 작성입니다이번 우아콘 세션들은 유튜브에 올라온다고 하니 세션 내용이 궁금하신 분들은 유튜브를 찾아보시면 좋을 것 같습니다 🔎   🎤 오프닝 노트 10시부터 오프닝노트 시작이라 일찍 도착해 이름표를 받고 영상을 보며 기다렸다이름 위에 회사 이름 혹은 대학생은 학교 이름이 적혀있었는데.. 더보기
[Android] UI는 왜 Main Thread에서만 그려져야 할까? 평소에 안드로이드 개발을 하면서 자연스럽게 오래 걸리는 작업은 백그라운드에서 실행하고 UI는 메인 스레드에서 그려야지 ! 라고 생각했는데 문득 왜...? 라는 생각이 들면서 한번에 대답이 나오질 않았다 그래서 이 참에 한번 정리를 해보려고 한다 안드로이드에는 Main Thread와 Worker Thread가 존재합니다 Main Thread는 어플리케이션을 실행 시 자동으로 생성되는 스레드이고,Worker Thread는 Main Thread와 별도로 동작하는 백그라운드 스레드입니다. 주로 작업을 병렬로 처리하거나 백그라운드 작업(ex. 네트워크 요청, 이미지 처리 등)을 실행하기 위해 사용합니다 우선 Main Thread에 대해 먼저 알아보도록 하겠습니다   ✏️ Main Thread일반적으로 메인 스레드.. 더보기
[Android] UseCase 꼭 필요할까? Clean Architecture를 기반으로 '다온길' 프로젝트를 진행하던 도중 UseCase에서는 단순히 Repository를 호출만 하는 코드가 늘어나고 있는 것을 발견할 수 있었다. 프로젝트가 커질수록 불필요한 코드들을 관리하기가 조금은 수고스러웠다. 그러던 도중 팀원들과 회의를 하다 이런 이야기가 나왔다. "UseCase 꼭 필요할까..? 🤔"  😮 UseCase란? Clean Architecture의 Domain Layer에서 UseCase의 모습을 볼 수 있습니다UseCase는 서비스를 사용하고 있는 사용자가 해당 서비스를 통해 하고자 하는 것을 의미합니다 예를 들어 쇼핑몰 서비스가 있을 때,- 상품 검색하기- 상품 구매하기- 상품 리뷰 남기기 등 서비스에서 사용자가 사용하고자 하는 최소 .. 더보기
[Android] 객체지향 프로그래밍이란? (객체지향 프로그래밍 != SOLID 원칙) 전공 수업을 들으며 객체지향 프로그래밍, SOLID 원칙 이라는 단어들이 참 많이 나왔었는데 직접 프로젝트를 진행하다보니 객체지향 프로그래밍의 중요성을 몸소 깨닫게 되었습니다 그런데 가끔 저도 모르게 객체지향 프로그래밍 == SOLID 원칙이라고 생각을 할 때가 있더라구요... 물론 둘다 객체지향 프로그래밍과 관련된 개념은 맞지만 서로 다른 정의를 가지고 있으니 이 참에 다시 정리를 해보려고 합니다  오늘은 우선 객체지향 프로그래밍에 대해서 정리해보겠습니다 !객체지향 프로그래밍 (Object Oriented Programming)은 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법 입니다 그리고 SOLID 원칙은 .. 더보기
[Android] 프로젝트에 Hilt로 의존성 주입하기 (다온길 마이그레이션) 다온길 프로젝트를 진행하며 처음엔 클린 아키텍처의 구조를 이해하는 단계라 Data Layer, Domain Layer, Presentation Layer를 모듈로 분리가 아닌 패키지로만 분리를 해서 코드를 구현했었습니다클린 아키텍처를 클린 아키텍처라고 부를 수 없는 ,,, 그리고 Hilt와 클린 아키텍처에 대해 조금 더 공부를 하고 Hilt를 도입해서 다온길 ver2로 제대로 Hilt를 사용한 클린 아키텍처로 마이그레이션을 진행하였습니다 이 과정에서 직접 수동으로 의존성 주입을 해주었을 때와 Hilt를 통해 의존성 주입을 해준 과정을 한번 정리해보려고 합니다 !  전체 코드를 가져오기엔 너무 많아서 마이그레이션을 하면서 제가 편하다고 느꼈던 부분들을 위주로 가져와보았습니다   👩🏻‍💻 기존 코드Re.. 더보기
[Android] Dagger와 Hilt로 자동 의존성 주입 이해하기 이전 포스팅에서 의존성 주입의 의미와 왜 필요한지, 그리고 수동 의존성 주입에 대해서 알아보았는데요그때 이야기 했던 수동 의존성 주입의 단점들을 보완하여 편하게 의존성을 주입하기 위해 DI 라이브러리인 Dagger와 Hilt에 대해 알아보려고 합니다   ☄️ DI 라이브러리의존성을 자동으로 주입해주는 라이브러리는 대표적으로 Dagger, Koin, Hilt가 있는데요그 중에서도 Dagger와 Hilt가 많이 사용되고, 특히 안드로이드에서는 Hilt를 가장 많이 사용하고 있습니다 그래서 저도 프로젝트를 진행하며 Hilt를 사용했었고, 처음엔 Hilt만 사용할거니까 Hilt만 알면 되지 않아? 라고 생각했는데 Hilt가 Dagger를 기반으로 만들어진 라이브러리라 Hilt를 잘 사용하기 위해서는 Dagger.. 더보기