Skip to content
/ til Public

안드로이드 개발자의 우당탕탕 오늘 뭐 배웠더라

Notifications You must be signed in to change notification settings

b1urrrr/til

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fae97e5 · Feb 4, 2025
Jan 20, 2025
Feb 3, 2025
Jan 29, 2025
Jan 6, 2025
Dec 29, 2024
Nov 11, 2024
Dec 25, 2024
Jan 29, 2025
Jun 19, 2024
Oct 7, 2024
Nov 20, 2024
Dec 23, 2024
Feb 1, 2025
Jul 3, 2024
Jun 13, 2024
Dec 4, 2024
Nov 5, 2024
Feb 3, 2025

Repository files navigation

TIL: Today I Learned


COMMIT CONVENTION

  • ➕ [ADD] : TIL 문서나 부수적 코드 추가
  • ✅ [MOD] : TIL 문서 및 내부 파일 수정
  • 🗑 [DEL] : 쓸모없는 코드 및 파일 삭제
  • ✏️ [CORRECT] : 문법 오류 해결, 타입 변경, 이름 변경 등의 작은 수정
  • 📄 [DOCS] : README 등의 부수적 문서 개정
  • 🚚 [MOVE] : 문서 파일 및 코드 이동
  • 🪧 [RENAME] : 파일 이름 변경
  • 🔀 [MERGE] : 다른 브랜치와 병합
  • ♻️ [REFACTOR] : 전면 수정

INDEX

Day 01 (~24.06.07.)

Category Title Link
Office Life 의사 전달 시 문서화를 습관화하자 🔗
Kotlin Object를 사용하는 이유 🔗
Kotlin 확장 함수 구현 시 메모리를 고려하자 🔗
Clean Architecture 도메인 모델에 의존값을 포함하지 말자 🔗
Coroutine ViewModelScope 대신 CoroutineScope를 사용해야 하는 경우 🔗

Day 02 (24.06.12.)

Category Title Link
Clean Architecture Repository를 인터페이스와 구현체로 분리하는 이유 🔗

Day 03 (24.06.13.)

Category Title Link
Object-Oriented Programming 재사용이 필요할 때 인터페이스를 적극 활용하자 🔗

Day 04 (24.06.14.)

Category Title Link
Network GET 통신 시에 Body 요청을 지양하는 이유 🔗
Kotlin @Throws를 사용하는 경우 🔗

Day 05 (24.06.17.)

Category Title Link
Clean Code 분기 처리 시 다른 조건에 의존적인 조건은 지양하자 🔗

Day 06 (24.06.19.)

Category Title Link
Data Structure 불변하면 Set, 순서가 상관 없으면 HashSet, 순서가 보장되어야 하면 MutableSet을 사용하자 🔗

Day 07 (24.06.20.)

Category Title Link
Kotlin 플랫폼 타입 사용을 지양하자 🔗

Day 08 (24.06.21.)

Category Title Link
Coroutine withTimeout()으로 코루틴 동작에 타임아웃을 설정하자 🔗
Android App Architecture Repository 또는 DataSource에서 앱 실행 중 캐시가 필요한 데이터를 저장하자 🔗

Day 09 (24.06.24.)

Category Title Link
Compose Modifier.offset()은 다른 컴포넌트와 독립적인 경우에만 사용하자 🔗

Day 10 (24.06.25.)

Category Title Link
Compose Modifier.clip()으로 컴포넌트를 원하는 형태로 자르자 🔗
Android Studio Clean Project를 통해 수정사항을 확실하게 빌드 시키자 🔗

Day 11 (24.06.26.)

Category Title Link
Clean Code 사용자 정의 오류보다 표준 오류를 사용하자 🔗

Day 12 (24.06.27.)

Category Title Link
Compose snapshotFlow로 State를 Flow로 변환하자 🔗

Day 13 (24.07.01.)

Category Title Link
Android Studio Kotlin Decompiler로 디컴파일된 Java 코드를 확인하자 🔗

Day 14 (24.07.02.)

Category Title Link
Network URL은 소문자로 구성하되, 단어를 구분할 때는 하이픈(-)을 사용하자 🔗
Network 안드로이드에서 딥링크를 구현하는 다양한 방법을 구분하자 🔗

Day 15 (24.07.03.)

Category Title Link
Clean Code 객체는 사용하는 경우에만 생성하자 🔗

Day 16 (24.07.04.)

Category Title Link
Kotlin Unit?을 리턴하지 말자 🔗

Day 17 (24.07.05.)

Category Title Link
Kotlin inner class 대신 nested class를 사용하자 🔗
Clean Code 타입 파라미터의 섀도잉을 피하자 🔗

Day 18 (24.07.08.)

Category Title Link
Compose Compose의 상태는 메인 스레드에서만 접근하자 🔗

Day 19 (24.07.09.)

Category Title Link
Android Component isTaskRoot를 통해 첫 번째 액티비티인지 확인하자 🔗

Day 20 (24.07.10.)

Category Title Link
Android Component RecyclerView를 구현할 때 Selection 라이브러리 사용을 지양하자 🔗

Day 21 (24.07.11.)

Category Title Link
WebView WebView에 domStorageEnable을 설정하자 🔗

Day 22 (24.07.12.)

Category Title Link
OkHttp Interceptor를 통해 네트워크 UserAgent를 설정하자 🔗

Day 23 (24.07.15.)

Category Title Link
Kotlin inferred 타입으로 리턴하지 말자 🔗

Day 24 (24.07.16.)

Category Title Link
Clean Code 결과를 처리할 때는 예외보다 Failure를 활용하자 🔗

Day 25 (24.07.17.)

Category Title Link
Office Life 코드 구조를 설계할 때는 설계하지 않았을 때의 문제점을 먼저 파악하자 🔗
Android App Architecture Analytics 로직은 DataSource나 Repository로 분리하지 말자 🔗

Day 26 (24.07.18.)

Category Title Link
Compose Layout Inspector를 이용해 컴포넌트 트리 구조와 리컴포지션 상태를 파악하자 🔗
Compose Scaffold에 paddingValues를 지정하여 BottomBar 크기를 고려하자 🔗

Day 27 (24.07.19.)

Category Title Link
Analytics Provider Library 애널리틱스 이벤트나 라이브러리의 추가 및 제거에 대한 리소스를 최소화하자 🔗

Day 28 (24.07.22.)

Category Title Link
Kotlin 가변성을 제한하자 🔗

Day 29 (24.07.24.)

Category Title Link
Glide Glide의 onResourceReady()를 통해 load가 종료된 시점에 동작을 처리하자 🔗

Day 30 (24.07.29.)

Category Title Link
Compose 점진적으로 Compose로 마이그레이션하는 전략을 사용하자 🔗

Day 31 (24.07.30.)

Category Title Link
Kakao SDK Library 카카오 로그인 여부를 확인할 때 토큰 유효성을 확인하자 🔗
Office Life QA 가능한 방법을 고려하여 기능을 개발하자 🔗

Day 32 (24.07.31.)

Category Title Link
Kotlin 클래스 생성 중 초기화할 수 없는 프로퍼티는 lateinit과 Delegates.notNull을 사용하자 🔗

Day 33 (24.08.01.)

Category Title Link
Kotlin close 대신 use를 사용하여 리소스를 해제하자 🔗

Day 34 (24.08.02.)

Category Title Link
WebView 웹뷰의 shouldOverrideUrlLoading()을 통해 웹 페이지 또는 intent를 처리하자 🔗

Day 35 (24.08.06.)

Category Title Link
Intent 인텐트에 액션과 데이터 스키마를 지정하여 다른 앱에서의 처리를 구현하자 🔗

Day 36 (24.08.07.)

Category Title Link
CRM CRM 툴을 통해 개인화된 마케팅 기능을 자동화하자 🔗

Day 37 (24.08.08.)

Category Title Link
Kotlin 변수 타입이 명확하지 않은 경우 확실하게 지정하자 🔗

Day 38 (24.08.09.)

Category Title Link
Compose ViewModel을 공유하여 XML 기반의 뷰에서 ComposeView의 상태를 바꾸자 🔗

Day 39 (24.08.12.)

Category Title Link
CoordinatorLayout BottomSheetBehavior를 통해 적절한 CoordinatorLayout 자식 뷰 상태를 지정하자 🔗

Day 40 (24.08.14.)

Category Title Link
Kotlin @DslMarker를 활용하여 외부 리시버 사용을 제한하자 🔗

Day 41 (24.08.16.)

Category Title Link
Office Life 새로운 버전의 앱을 배포할 때에는 이전 버전과의 호환성을 확인하자 🔗

Day 42 (24.08.20.)

Category Title Link
URLEncoder URLEncoder를 통해 HTML 형식으로 인코딩하자 🔗

Day 43 (24.08.21.)

Category Title Link
Analytics Provider Library 각 애널리틱스 라이브러리의 특성을 이해하자 🔗

Day 44 (24.08.22.)

Category Title Link
Office Life 스테이징 서버를 통해 운영 서버와 유사한 환경에서 검증하자 🔗

Day 45 (24.08.27.)

Category Title Link
Activity 액티비티 launchMode로 singleTask나 singleInstance를 지정하는 것을 지양하자 🔗

Day 46 (24.08.29.)

Category Title Link
Compose Screen 단에서의 HiltViewModel 생성을 지양하자 🔗

Day 47 (24.09.19.)

Category Title Link
Compose Modifier 함수 간의 순서를 고려하자 🔗

Day 48 (24.09.20.)

Category Title Link
Kotlin 멤버 확장 함수 사용을 지양하자 🔗

Day 49 (24.09.23.)

Category Title Link
Kotlin 컬렉션의 처리 단계 수를 제한하자 🔗

Day 50 (24.09.24.)

Category Title Link
Kotlin 성능이 중요한 경우에 기본 자료형 배열을 사용하자 🔗

Day 51 (24.09.25.)

Category Title Link
Kotlin 지역 스코프에서는 mutable 컬렉션을 사용하자 🔗

Day 52 (24.09.26.)

Category Title Link
Kotlin 함수와 메서드의 차이를 이해하자 🔗

Day 53 (24.09.30.)

Category Title Link
Kotlin let을 적절한 상황에 사용하자 🔗

Day 54 (24.10.02.)

Category Title Link
Compose 사이드 이펙트가 발생하는 로직은 LaunchedEffect 스코프 내부에서 호출하자 🔗

Day 55 (24.10.04.)

Category Title Link
Compose 비전역적인 ModalBottomSheet 사용을 지양하자 🔗

Day 56 (24.10.07.)

Category Title Link
Database DB 작업 시 Delete와 Update를 지양하자 🔗

Day 57 (24.10.08.)

Category Title Link
Kotlin 변수의 스코프를 최소화하자 🔗

Day 58 (24.10.10.)

Category Title Link
Kotlin Collection과 Sequence를 적절히 사용하자 🔗

Day 59 (24.10.11.)

Category Title Link
Kotlin sealed class와 enum class를 적절히 사용하자 🔗

Day 60 (24.10.14.)

Category Title Link
ViewModel Extra를 전달 받을 때 SavedStateHandle을 활용하자 🔗

Day 61 (24.10.15.)

Category Title Link
Compose Modifier.drawWithCache()를 통해 컴포저블 뷰를 Bitmap 이미지로 변환하자 🔗

Day 62 (24.10.16.)

Category Title Link
Kotlin 예외를 활용해 코드에 제한을 걸자 🔗

Day 63 (24.10.18.)

Category Title Link
Compose 액티비티를 탐색하여 참조해야하는 경우 baseContext를 활용하자 🔗

Day 64 (24.10.21.)

Category Title Link
Android Library 외부 라이브러리를 사용할 때 추상화가 되어있는 영역을 파악하자 🔗

Day 65 (24.10.22.)

Category Title Link
Compose Compose에서 블러 효과를 구현하는 다양한 방식을 구분하자 🔗

Day 66 (24.10.23.)

Category Title Link
Compose Nested Graph를 통해 복잡한 Compose 네비게이션 동작을 구현하자 🔗

Day 67 (24.10.28.)

Category Title Link
WebView pauseTimers()와 resumeTimers()를 통해 WebView의 리소스를 관리하자 🔗

Day 68 (24.10.29.)

Category Title Link
Orbit Orbit으로 State와 SideEffect를 관리하자 🔗

Day 69 (24.10.31.)

Category Title Link
Compose Compose 뷰에서 무거운 연산 작업을 하는 경우에는 remember에 key 값을 사용하자 🔗

Day 70 (24.11.01.)

Category Title Link
Kotlin require 함수를 통해 함수 argument에 제한을 걸자 🔗

Day 71 (24.11.05.)

Category Title Link
Test 단위 테스트의 장단점과 활용하기 적합한 케이스를 파악하자 🔗

Day 72 (24.11.07.)

Category Title Link
Kotlin 연산자 오버로딩 시 의미에 맞게 사용하자 🔗

Day 73 (24.11.08.)

Category Title Link
Kotlin 프로퍼티와 함수를 적절히 사용하자 🔗

Day 74 (24.11.11.)

Category Title Link
Clean Code 일반적인 알고리즘을 구현하는 경우 제네릭을 사용하자 🔗

Day 75 (24.11.12.)

Category Title Link
Compose Scaffold 하단에 독립적인 버튼이 있는 경우 bottomBar를 사용하자 🔗

Day 76 (24.11.13.)

Category Title Link
Kotlin Enum 타입에 대해 분기 처리가 복잡해지는 경우 Enum 클래스에 프로퍼티를 추가하여 상태를 캡슐화하자 🔗

Day 77 (24.11.15.)

Category Title Link
Android Studio 안드로이드의 메모리 누수 탐지 도구를 활용하자 🔗

Day 78 (24.11.18.)

Category Title Link
View 안드로이드 View의 생명주기를 이해하자 🔗

Day 79 (24.11.19.)

Category Title Link
TextField Compose TextField의 비동기 입력을 구현하는 다양한 방법을 구분하자 🔗

Day 80 (24.11.20.)

Category Title Link
Git Rebase와 Merge를 적절히 사용하자 🔗

Day 81 (24.11.22.)

Category Title Link
Office Life 확장 가능성이 있는 기능은 서버에서 동적으로 수정 가능하도록 설계하자 🔗

Day 82 (24.12.04.)

Category Title Link
Office Life 프로젝트 설계 단계에서 Tech Spec 문서를 통해 목표와 개발 범위를 정리하자 🔗

Day 83 (24.12.06.)

Category Title Link
Kotlin 단발성 이벤트 처리 시 Flow 대신 Channel을 사용하자 🔗

Day 84 (24.12.09.)

Category Title Link
Coding Principles 로직과 알고리즘을 구분하자 🔗
Clean Architecture 재사용을 위해 코드를 추출하는 경우 단일 책임 원칙을 고려하자 🔗

Day 85 (24.12.10.)

Category Title Link
Kotlin 일반적인 프로퍼티의 행위는 프로퍼티 위임으로 추출하여 재사용하자 🔗

Day 86 (24.12.11.)

Category Title Link
Kotlin variance 한정자를 통해 제너릭의 타입 간 관련성을 관리하자 🔗

Day 87 (24.12.13.)

Category Title Link
Compose Compose 화면 최초 진입 시 발생하는 사이드 이펙트는 LaunchedEffect(Unit)를 사용하지 말자 🔗

Day 88 (24.12.16.)

Category Title Link
Coroutine 코루틴의 데이터 공유 상태로 인한 문제를 해결하는 다양한 방법을 구분하자 🔗
Coroutine Mutex를 통해 자원에 대한 동시 접근을 제한하자 🔗

Day 89 (24.12.19.)

Category Title Link
Android Studio .editorconfig 파일을 통해 ktlint 스타일을 커스텀하자 🔗

Day 90 (24.12.23.)

Category Title Link
Compose Compose 컴포넌트를 구현할 때 Material에 대한 의존성을 최소화하자 🔗
Github Github 라이선스 종류를 구분하자 🔗

Day 91 (24.12.25.)

Category Title Link
Compose ImageVector와 PainterResource를 적절히 사용하자 🔗
Coding Principles 설계와 아키텍처 개념을 구분하자 🔗

Day 92 (24.12.29.)

Category Title Link
Clean Architecture Mapper 클래스를 통해 컴포넌트 간 의존성의 방향을 제어하자 🔗

Day 93 (25.01.02.)

Category Title Link
Gradle Gradle Type-Safe Project Accessors를 통해 멀티 모듈 의존성을 안전하게 작성하자 🔗

Day 94 (25.01.04.)

Category Title Link
Compose Slot Pattern을 통해 컴포저블의 특정 영역을 외부에서 자유롭게 구성하자 🔗

Day 95 (25.01.06.)

Category Title Link
Android Tool R8을 통해 효율적으로 앱을 최적화하자 🔗

Day 96 (25.01.09.)

Category Title Link
Compose throttleClickable을 통해 중복된 클릭 이벤트를 제한하자 🔗

Day 97 (25.01.11.)

Category Title Link
Kotlin runCatching, mapCatching, recoverCatching을 통해 안전하게 예외를 처리하자 🔗

Day 98 (25.01.13.)

Category Title Link
Compose Modifier에 role을 명시하여 접근성을 개선하자 🔗

Day 99 (25.01.17.)

Category Title Link
Activity enableEdgeToEdge를 통해 확장된 화면을 제공하자 🔗

Day 100 (25.01.20.)

Category Title Link
WebView 변경이나 오류가 자주 발생하는 화면은 웹뷰로 구현하자 🔗
Android Studio SDK의 설정과 AndroidManifest.xml의 속성이 충돌하는 경우에 tools:replace 속성을 활용하자 🔗

Day 101 (25.01.22.)

Category Title Link
Kotlin Spread 연산자(*)를 이용해 배열이나 컬렉션 요소를 개별 인자로 변환하자 🔗

Day 102 (25.01.29.)

Category Title Link
Compose PreviewParameterProvider를 통해 프리뷰의 상태별 파라미터를 주입하자 🔗
Android Studio local.properties와 gradle.properties 파일을 구분하여 활용하자 🔗
Compose DisposableEffect를 통해 생명주기에 따라 정리가 필요한 사이드 이펙트를 처리하자 🔗

Day 103 (25.02.01.)

Category Title Link
Java OkHttp WebSocket을 통해 소켓 통신을 구현하자 🔗

Day 104 (25.02.03.)

Category Title Link
Lottie Lottie 사용 시 애니메이션 비활성화 및 속도 조절 설정을 고려하자 🔗