안드로이드
-
[Native] 기본기에 관하여 (Feat. 2024년 11월 첫째주의 악몽)IT Study 2024. 11. 10. 14:38
저는 iOS를 갑작스럽게 시작하게 되었습니다. 안드로이드 개발자로서 모바일 분야에 관심이 많았던 것은 사실이지만, 안드로이드라는 분야의 전문성을 키워나가고자 하는 것이 주된 목표였습니다. 안드로이드라는 주 분야에 더해 iOS를 사이드 프로젝트를 진행하며 모바일 개발자로서의 두각을 드러내고자 했습니다.그러나 업무를 진행하며, iOS 개발자의 부재로 인해 모바일 파트를 모두 맡게 되었습니다. (여기에서 모바일 파트는 Native의 순기능을 사용할 수 있는 Android, iOS 분야로 한정하도록 하겠습니다.) 처음엔 그닥 두렵지 않았습니다. Swift와 Objective-C는 그저 개발 언어 중 하나일 뿐, 모든 언어는 비슷한 흐름을 가지고 있다고 생각했습니다. 지금까지 여러 언어를 접하며, 처음엔 어색하고..
-
[우아콘 2024] XML에서 Compose로의 전환 (Feat. 안드로이드)IT Study/Android 2024. 10. 30. 14:27
이번 우아콘 2024에서 "XML을 Compose로 전환하기" 세션에 참석했습니다.기존의 XML 기반 UI를 Jetpack Compose로 전환하는 과정에서의 경험을 들은 이후, 사견에 대해 공유하고자 합니다 :) 1. 전환 계기우아한형제의 안드로이드 팀에서는 공통 디자인 시스템 구축을 위해 Compose를 도입하기 시작했습니다. 단순한 공통 시스템을 위해 Compose를 도입하는 것이 적절한지에 대한 의구심이 있었으나, 선언적 UI의 이점과 코틀린만으로 개발이 가능하다는 점이 매력적으로 작용하여 도입을 결정지은 듯 합니다. 2. Compose의 장점아래 내용 중 예상하건데, 점진적 전환이 가능했기에 서비스에 도입할 수 있지 않았을까요?선언형 UI로 인한 성능 개선 : 화면의 변경되는 부분만을 다시 그..
-
[Android] Material 3 BottomNavigationView Indicator(인디케이터) 색상 설정하기IT Study/Android 2024. 7. 28. 12:32
안녕하세요. Three입니다. 최근 개인 앱을 기획하기 시작해, Material 3라고 하는 구글 안드로이드 디자인 시스템을 기준으로 디자인을 마친 상태입니다. 처음 이 개인 프로젝트를 시작하며 아래와 같은 목표를 세웠습니다.1. 앱 출시를 해보자.2. Jetpack Compose라는 새로운 선언형 UI 툴킷을 사용해보자. 그러나 Jetpack Compose를 학습하고 익숙해지는 데에 시간이 꽤나 소요되고 있어, 먼저 저에게 익숙한 xml + 바인딩 작업으로 시작하게 되었습니다. (앱 출시 이후, 꾸준히 발전시켜 나가며 Jetpack Compose로 전환해볼 예정입니다.) 1. 문제 상황먼저 메인 화면에 존재하는 네비게이션 바 작업을 하던 도중 아래와 같은 문제가 발생했습니다. 네비게이션 바를 선택할..
-
[Android/Kotlin] 코틀린과 코루틴IT Study/Android 2024. 5. 19. 15:08
코루틴의 개념을 정확하게 이해하고 활용하기 위해, 이를 주제로 글을 작성해보려고 합니다 :) 🍇 목차1. Coroutine2. Thread와 Coroutine3. 그래서 Coroutine이 뭔데?4. 코루틴의 구성요소4-1. Coroutine Context4-2. Coroutine Builder4-2-1. launch (main thread unblocking)4-2-2. runBlocking (main thread blocking)4-2-3. async (main thread unblocking)4-3. Coroutine Scope5. 주요 함수 1. Coroutine우리는 작성된 순서대로 실행되는, 동기적인 실행 방식을 채택해왔다.그러나 여러 루틴을 동시 실행하기 위해 비동기 처리를 지원하는 코루틴..
-
[개인 프로젝트] 내가 사용하기 위한 앱 만들기 (Feat. 집중을 위한 앱)Daily/Project 2024. 5. 12. 16:45
나에게 필요한, 내가 사용하기 위한 앱을 만들어보자.나는 다시 개인 프로젝트를 시작하려고 한다. 이번 프로젝트는 나 자신을 위한 앱을 만드는 것이 목표이다. 지금 나에게 필요한 것은 무엇일까?나는 약 3개월 전 안드로이드 개발자로 일을 시작했다. 그러나 나는 일반적인 안드로이드 앱을 개발하는 것이 아니라, 안드로이드 에이전트(라이브러리, SDK)를 개발하는 일을 하게 되었다.새로운 분야에서의 시작은 어려움이 많았다. 그러나 나는 빠르고 확실하게 적응하기 위해 노력을 했고, 난 지난 3개월 동안 회사 업무(코드)에 집중하며 열심히 일했다.이런 과정에서 난 많은 것을 배우고 성장했다. 하지만, 나는 계속해서 공부하고 성장하고자 하는 욕망을 느꼈다. 그러나 지난 3개월 동안 나는 나 자신을 위한 여러 가..
-
[Android/Kotlin] 옵저버 패턴이란?IT Study/Android 2024. 4. 10. 18:10
1. 옵저버 패턴이란 옵저버 패턴은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나이다. 옵저버 패턴에 대해 알아보기 전, 먼저 옵저버가 무엇인지 생각해보자. Observer(이하 옵저버)란, 감시자 혹은 관찰자를 의미한다. 말 그대로 무언가를 감시하는 역할을 수행하고 있다는 것. 즉, 어떤 이벤트가 일어나는 것을 감시하는 패턴을 의미한다. 마치 안드로이드 리스너와 같은 개념 아닌가? 1. 버튼을 클릭했을 때 2. 키보드를 통해 글자를 입력할 때 3. API 콜에 대한 응답 데이터를 수신받았을 때 시스템에 의해 발생하는 동작, 이벤트가 발생했을 때 이를 감시하고 미리 정의된 동작을 수행하도록 하는 것이 바로 옵저버 패턴이다. 그렇다면 옵저버 패턴은 어떤 원리로 동작하는 것일까? 미리 힌트를 주자면,..
-
[Android/Kotlin] "Can't create handler inside thread that has not called Looper.prepare()" 예외IT Study/Android 2024. 4. 4. 22:02
안녕하세요. 개발하며 만나게 된 예외에 대해 다뤄보도록 하겠습니다. 🥺 (너무 오랜만에 블로그 글로 돌아왔습니다...!!!!) 1. "Can't create handler inside thread that has not called Looper.prepare()" 오류의 의미 안드로이드 앱에서 백그라운드 스레드에서 핸들러(Handler)를 생성하려 할 때 발생합니다. 이를 이해하기 위해서는 먼저 안드로이드의 Looper와 Handler 시스템에 대해 알아야 합니다. 그럼 Handler는 메인 스레드에서만 생성해야하나요? 핸들러는 *기본적으로 생성된 스레드의 Looper에 연결됩니다. 메인 스레드에서 생성된 핸들러는 자동으로 메인 스레드의 Looper와 연결되기 때문에, 추가 작업 없이 UI 업데이트를 수..
-
[Android] Foreground Service를 사용하고 싶을 경우 (feat. API 레벨 34 이상)IT Study/Android 2024. 1. 30. 15:35
1. Foreground Service 사용 시, Manifest 파일 설정 Android 12(API 레벨 34)에서는 Foreground Service를 사용하는 앱이 명확한 권한을 요청하도록 변경되었습니다. 이는 사용자의 프라이버시를 보호하고, 앱이 어떤 서비스를 실행하는지 더욱 명확하게 인지할 수 있도록 돕기 위함입니다. 그래서 이전에 사용하던 방법만으로는 원하는 포그라운드 실행이 되지 않는데요. 이럴 경우 매니페스트 파일에 아래와 같은 코드를 작성하면 해결할 수 있습니다. 2. android.permission.FOREGROUND_SERVICE Foreground Service를 사용할 수 있도록 하는 기본 권한입니다. 이 권한이 없으면 앱은 Foreground Service를 전혀 사용할 수 ..