Skip to content
/ til Public

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

Notifications You must be signed in to change notification settings

b1urrrr/til

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 라이선스 종류를 구분하자 🔗