├── Android Component ├── Activity │ ├── enableEdgeToEdge를 통해 확장된 화면을 제공하자.md │ └── 액티비티 launchMode로 singleTask나 singleInstance를 지정하는 것을 지양하자.md ├── CoordinatorLayout │ └── BottomSheetBehavior를 통해 적절한 CoordinatorLayout 자식 뷰 상태를 지정하자.md ├── Intent │ └── 인텐트에 액션과 데이터 스키마를 지정하여 다른 앱에서의 처리를 구현하자.md ├── RecyclerView를 구현할 때 Selection 라이브러리 사용을 지양하자.md ├── TextField │ └── Compose TextField의 비동기 입력을 구현하는 다양한 방법을 구분하자.md ├── URLEncoder │ └── URLEncoder를 통해 HTML 형식으로 인코딩하자.md ├── View │ └── 안드로이드 View의 생명주기를 이해하자.md ├── ViewModel │ └── Extra를 전달 받을 때 SavedStateHandle을 활용하자.md ├── WebView │ ├── WebView에 domStorageEnable을 설정하자.md │ ├── pauseTimers()와 resumeTimers()를 통해 WebView의 리소스를 관리하자.md │ ├── 변경이나 오류가 자주 발생하는 화면은 웹뷰로 구현하자.md │ └── 웹뷰의 shouldOverrideUrlLoading()을 통해 웹 페이지 또는 intent를 처리하자.md └── isTaskRoot를 통해 첫 번째 액티비티인지 확인하자.md ├── Android Library ├── Analytics Provider Library │ ├── 각 애널리틱스 라이브러리의 특성을 이해하자.md │ └── 애널리틱스 이벤트나 라이브러리의 추가 및 제거에 대한 리소스를 최소화하자.md ├── CRM │ └── CRM 툴을 통해 개인화된 마케팅 기능을 자동화하자.md ├── Glide │ └── Glide의 onResourceReady()를 통해 load가 종료된 시점에 동작을 처리하자.md ├── Kakao SDK Library │ └── 카카오 로그인 여부를 확인할 때 토큰 유효성을 확인하자.md ├── Lottie │ └── Lottie 사용 시 애니메이션 비활성화 및 속도 조절 설정을 고려하자.md ├── OkHttp │ └── Interceptor를 통해 네트워크 UserAgent를 설정하자.md ├── Orbit │ └── Orbit으로 State와 SideEffect를 관리하자.md └── 외부 라이브러리를 사용할 때 추상화가 되어있는 영역을 파악하자.md ├── Android Studio ├── .editorconfig 파일을 통해 ktlint 스타일을 커스텀하자.md ├── Clean Project를 통해 수정사항을 확실하게 빌드 시키자.md ├── Gradle │ └── Gradle Type-Safe Project Accessors를 통해 멀티 모듈 의존성을 안전하게 작성하자.md ├── Kotlin Decompiler로 디컴파일된 Java 코드를 확인하자.md ├── SDK의 설정과 AndroidManifest.xml의 속성이 충돌하는 경우에 tools:replace 속성을 활용하자.md ├── local.properties와 gradle.properties 파일을 구분하여 활용하자.md └── 안드로이드의 메모리 누수 탐지 도구를 활용하자.md ├── Android Tool └── R8을 통해 효율적으로 앱을 최적화하자.md ├── Architecture ├── Android App Architecture │ ├── Analytics 로직은 DataSource나 Repository로 분리하지 말자.md │ └── Repository 또는 DataSource에서 앱 실행 중 캐시가 필요한 데이터를 저장하자.md └── Clean Architecture │ ├── Mapper 클래스를 통해 컴포넌트 간 의존성의 방향을 제어하자.md │ ├── Repository를 인터페이스와 구현체로 분리하는 이유.md │ ├── 도메인 모델에 의존값을 포함하지 말자.md │ └── 재사용을 위해 코드를 추출하는 경우 단일 책임 원칙을 고려하자.md ├── Clean Code ├── 객체는 사용하는 경우에만 생성하자.md ├── 결과를 처리할 때는 예외보다 Failure를 활용하자.md ├── 분기 처리 시 다른 조건에 의존적인 조건은 지양하자.md ├── 사용자 정의 오류보다 표준 오류를 사용하자.md ├── 일반적인 알고리즘을 구현하는 경우 제네릭을 사용하자.md └── 타입 파라미터의 섀도잉을 피하자.md ├── Coding Principles ├── 로직과 알고리즘을 구분하자.md └── 설계와 아키텍처 개념을 구분하자.md ├── Compose ├── Compose 뷰에서 무거운 연산 작업을 하는 경우에는 remember에 key 값을 사용하자.md ├── Compose 컴포넌트를 구현할 때 Material에 대한 의존성을 최소화하자.md ├── Compose 화면 최초 진입 시 발생하는 사이드 이펙트는 LaunchedEffect(Unit)를 사용하지 말자.md ├── Compose에서 블러 효과를 구현하는 다양한 방식을 구분하자.md ├── Compose의 상태는 메인 스레드에서만 접근하자.md ├── DisposableEffect를 통해 생명주기에 따라 정리가 필요한 사이드 이펙트를 처리하자.md ├── ImageVector와 PainterResource를 적절히 사용하자.md ├── Layout Inspector를 이용해 컴포넌트 트리 구조와 리컴포지션 상태를 파악하자.md ├── Modifier 함수 간의 순서를 고려하자.md ├── Modifier.clip()으로 컴포넌트를 원하는 형태로 자르자.md ├── Modifier.drawWithCache()를 통해 컴포저블 뷰를 Bitmap 이미지로 변환하자.md ├── Modifier.offset()은 다른 컴포넌트와 독립적인 경우에만 사용하자.md ├── Modifier에 role을 명시하여 접근성을 개선하자.md ├── Nested Graph를 통해 복잡한 Compose 네비게이션 동작을 구현하자.md ├── PreviewParameterProvider를 통해 프리뷰의 상태별 파라미터를 주입하자.md ├── Scaffold 하단에 독립적인 버튼이 있는 경우 bottomBar를 사용하자.md ├── Scaffold에 paddingValues를 지정하여 BottomBar 크기를 고려하자.md ├── Screen 단에서의 HiltViewModel 생성을 지양하자.md ├── Slot Pattern을 통해 컴포저블의 특정 영역을 외부에서 자유롭게 구성하자.md ├── ViewModel을 공유하여 XML 기반의 뷰에서 ComposeView의 상태를 바꾸자.md ├── snapshotFlow로 State를 Flow로 변환하자.md ├── throttleClickable을 통해 중복된 클릭 이벤트를 제한하자.md ├── 비전역적인 ModalBottomSheet 사용을 지양하자.md ├── 사이드 이펙트가 발생하는 로직은 LaunchedEffect 스코프 내부에서 호출하자.md ├── 액티비티를 탐색하여 참조해야하는 경우 baseContext를 활용하자.md └── 점진적으로 Compose로 마이그레이션하는 전략을 사용하자.md ├── Data Structure └── 불변하면 Set, 순서가 상관 없으면 HashSet, 순서가 보장되어야 하면 MutableSet을 사용하자.md ├── Database └── DB 작업 시 Delete와 Update를 지양하자.md ├── Git └── Rebase와 Merge를 적절히 사용하자.md ├── Github └── Github 라이선스 종류를 구분하자.md ├── Language ├── Java │ └── Okhttp WebSocket을 통해 소켓 통신을 구현하자.md └── Kotlin │ ├── @DslMarker를 활용하여 외부 리시버 사용을 제한하자.md │ ├── @Throws를 사용하는 경우.md │ ├── Collection과 Sequence를 적절히 사용하자.md │ ├── Coroutine │ ├── Mutex를 통해 자원에 대한 동시 접근을 제한하자.md │ ├── ViewModelScope 대신 CoroutineScope를 사용해야하는 경우.md │ ├── withTimeout()으로 코루틴 동작에 타임아웃을 설정하자.md │ └── 코루틴의 데이터 공유 상태로 인한 문제를 해결하는 다양한 방법을 구분하자.md │ ├── Enum 타입에 대해 분기 처리가 복잡해지는 경우 Enum 클래스의 프로퍼티를 통해 상태를 캡슐화하자.md │ ├── Object를 사용하는 이유.md │ ├── Spread 연산자(*)를 이용해 배열이나 컬렉션 요소를 개별 인자로 변환하자.md │ ├── Unit?을 리턴하지 말자.md │ ├── close 대신 use를 사용하여 리소스를 해제하자.md │ ├── inferred 타입으로 리턴하지 말자.md │ ├── inner class 대신 nested class를 사용하자.md │ ├── let을 적절한 상황에 사용하자.md │ ├── require 함수를 통해 함수 argument에 제한을 걸자.md │ ├── runCatching, mapCatching, recoverCatching을 통해 안전하게 예외를 처리하자.md │ ├── sealed class와 enum class를 적절히 사용하자.md │ ├── variance 한정자를 통해 제너릭의 타입 간 관련성을 관리하자.md │ ├── 가변성을 제한하자.md │ ├── 단발성 이벤트 처리 시 Flow 대신 Channel을 사용하자.md │ ├── 멤버 확장 함수 사용을 지양하자.md │ ├── 변수 타입이 명확하지 않은 경우 확실하게 지정하자.md │ ├── 변수의 스코프를 최소화하자.md │ ├── 성능이 중요한 경우에 기본 자료형 배열을 사용하자.md │ ├── 연산자 오버로딩 시 의미에 맞게 사용하자.md │ ├── 예외를 활용해 코드에 제한을 걸자.md │ ├── 일반적인 프로퍼티의 행위는 프로퍼티 위임으로 추출하여 재사용하자.md │ ├── 지역 스코프에서는 mutable 컬렉션을 사용하자.md │ ├── 컬렉션의 처리 단계 수를 제한하자.md │ ├── 클래스 생성 중 초기화할 수 없는 프로퍼티는 lateinit과 Delegates.notNull을 사용하자.md │ ├── 프로퍼티와 함수를 적절히 사용하자.md │ ├── 플랫폼 타입 사용을 지양하자.md │ ├── 함수와 메서드의 차이를 이해하자.md │ └── 확장 함수 구현 시 메모리를 고려하자.md ├── Network ├── GET 통신 시에 Body 요청을 지양하는 이유.md ├── URL은 소문자로 구성하되, 단어를 구분할 때는 하이픈(-)을 사용하자.md └── 안드로이드에서 딥링크를 구현하는 다양한 방법을 구분하자.md ├── Object-Oriented Programming └── 재사용이 필요할 때 인터페이스를 적극 활용하자.md ├── Office Life ├── QA 가능한 방법을 고려하여 기능을 개발하자.md ├── 새로운 버전의 앱을 배포할 때에는 이전 버전과의 호환성을 확인하자.md ├── 스테이징 서버를 통해 운영 서버와 유사한 환경에서 검증하자.md ├── 의사 전달 시 문서화를 습관화하자.md ├── 코드 구조를 설계할 때는 설계하지 않았을 때의 문제점을 먼저 파악하자.md ├── 프로젝트 설계 단계에서 Tech Spec 문서를 통해 목표와 개발 범위를 정리하자.md └── 확장 가능성이 있는 기능은 서버에서 동적으로 수정 가능하도록 설계하자.md ├── README.md └── Test └── 단위 테스트의 장단점과 활용하기 적합한 케이스를 파악하자.md /Android Component/Activity/enableEdgeToEdge를 통해 확장된 화면을 제공하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/Activity/enableEdgeToEdge를 통해 확장된 화면을 제공하자.md -------------------------------------------------------------------------------- /Android Component/Activity/액티비티 launchMode로 singleTask나 singleInstance를 지정하는 것을 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/Activity/액티비티 launchMode로 singleTask나 singleInstance를 지정하는 것을 지양하자.md -------------------------------------------------------------------------------- /Android Component/CoordinatorLayout/BottomSheetBehavior를 통해 적절한 CoordinatorLayout 자식 뷰 상태를 지정하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/CoordinatorLayout/BottomSheetBehavior를 통해 적절한 CoordinatorLayout 자식 뷰 상태를 지정하자.md -------------------------------------------------------------------------------- /Android Component/Intent/인텐트에 액션과 데이터 스키마를 지정하여 다른 앱에서의 처리를 구현하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/Intent/인텐트에 액션과 데이터 스키마를 지정하여 다른 앱에서의 처리를 구현하자.md -------------------------------------------------------------------------------- /Android Component/RecyclerView를 구현할 때 Selection 라이브러리 사용을 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/RecyclerView를 구현할 때 Selection 라이브러리 사용을 지양하자.md -------------------------------------------------------------------------------- /Android Component/TextField/Compose TextField의 비동기 입력을 구현하는 다양한 방법을 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/TextField/Compose TextField의 비동기 입력을 구현하는 다양한 방법을 구분하자.md -------------------------------------------------------------------------------- /Android Component/URLEncoder/URLEncoder를 통해 HTML 형식으로 인코딩하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/URLEncoder/URLEncoder를 통해 HTML 형식으로 인코딩하자.md -------------------------------------------------------------------------------- /Android Component/View/안드로이드 View의 생명주기를 이해하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/View/안드로이드 View의 생명주기를 이해하자.md -------------------------------------------------------------------------------- /Android Component/ViewModel/Extra를 전달 받을 때 SavedStateHandle을 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/ViewModel/Extra를 전달 받을 때 SavedStateHandle을 활용하자.md -------------------------------------------------------------------------------- /Android Component/WebView/WebView에 domStorageEnable을 설정하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/WebView/WebView에 domStorageEnable을 설정하자.md -------------------------------------------------------------------------------- /Android Component/WebView/pauseTimers()와 resumeTimers()를 통해 WebView의 리소스를 관리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/WebView/pauseTimers()와 resumeTimers()를 통해 WebView의 리소스를 관리하자.md -------------------------------------------------------------------------------- /Android Component/WebView/변경이나 오류가 자주 발생하는 화면은 웹뷰로 구현하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/WebView/변경이나 오류가 자주 발생하는 화면은 웹뷰로 구현하자.md -------------------------------------------------------------------------------- /Android Component/WebView/웹뷰의 shouldOverrideUrlLoading()을 통해 웹 페이지 또는 intent를 처리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/WebView/웹뷰의 shouldOverrideUrlLoading()을 통해 웹 페이지 또는 intent를 처리하자.md -------------------------------------------------------------------------------- /Android Component/isTaskRoot를 통해 첫 번째 액티비티인지 확인하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Component/isTaskRoot를 통해 첫 번째 액티비티인지 확인하자.md -------------------------------------------------------------------------------- /Android Library/Analytics Provider Library/각 애널리틱스 라이브러리의 특성을 이해하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/Analytics Provider Library/각 애널리틱스 라이브러리의 특성을 이해하자.md -------------------------------------------------------------------------------- /Android Library/Analytics Provider Library/애널리틱스 이벤트나 라이브러리의 추가 및 제거에 대한 리소스를 최소화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/Analytics Provider Library/애널리틱스 이벤트나 라이브러리의 추가 및 제거에 대한 리소스를 최소화하자.md -------------------------------------------------------------------------------- /Android Library/CRM/CRM 툴을 통해 개인화된 마케팅 기능을 자동화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/CRM/CRM 툴을 통해 개인화된 마케팅 기능을 자동화하자.md -------------------------------------------------------------------------------- /Android Library/Glide/Glide의 onResourceReady()를 통해 load가 종료된 시점에 동작을 처리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/Glide/Glide의 onResourceReady()를 통해 load가 종료된 시점에 동작을 처리하자.md -------------------------------------------------------------------------------- /Android Library/Kakao SDK Library/카카오 로그인 여부를 확인할 때 토큰 유효성을 확인하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/Kakao SDK Library/카카오 로그인 여부를 확인할 때 토큰 유효성을 확인하자.md -------------------------------------------------------------------------------- /Android Library/Lottie/Lottie 사용 시 애니메이션 비활성화 및 속도 조절 설정을 고려하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/Lottie/Lottie 사용 시 애니메이션 비활성화 및 속도 조절 설정을 고려하자.md -------------------------------------------------------------------------------- /Android Library/OkHttp/Interceptor를 통해 네트워크 UserAgent를 설정하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/OkHttp/Interceptor를 통해 네트워크 UserAgent를 설정하자.md -------------------------------------------------------------------------------- /Android Library/Orbit/Orbit으로 State와 SideEffect를 관리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/Orbit/Orbit으로 State와 SideEffect를 관리하자.md -------------------------------------------------------------------------------- /Android Library/외부 라이브러리를 사용할 때 추상화가 되어있는 영역을 파악하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Library/외부 라이브러리를 사용할 때 추상화가 되어있는 영역을 파악하자.md -------------------------------------------------------------------------------- /Android Studio/.editorconfig 파일을 통해 ktlint 스타일을 커스텀하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/.editorconfig 파일을 통해 ktlint 스타일을 커스텀하자.md -------------------------------------------------------------------------------- /Android Studio/Clean Project를 통해 수정사항을 확실하게 빌드 시키자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/Clean Project를 통해 수정사항을 확실하게 빌드 시키자.md -------------------------------------------------------------------------------- /Android Studio/Gradle/Gradle Type-Safe Project Accessors를 통해 멀티 모듈 의존성을 안전하게 작성하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/Gradle/Gradle Type-Safe Project Accessors를 통해 멀티 모듈 의존성을 안전하게 작성하자.md -------------------------------------------------------------------------------- /Android Studio/Kotlin Decompiler로 디컴파일된 Java 코드를 확인하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/Kotlin Decompiler로 디컴파일된 Java 코드를 확인하자.md -------------------------------------------------------------------------------- /Android Studio/SDK의 설정과 AndroidManifest.xml의 속성이 충돌하는 경우에 tools:replace 속성을 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/SDK의 설정과 AndroidManifest.xml의 속성이 충돌하는 경우에 tools:replace 속성을 활용하자.md -------------------------------------------------------------------------------- /Android Studio/local.properties와 gradle.properties 파일을 구분하여 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/local.properties와 gradle.properties 파일을 구분하여 활용하자.md -------------------------------------------------------------------------------- /Android Studio/안드로이드의 메모리 누수 탐지 도구를 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Studio/안드로이드의 메모리 누수 탐지 도구를 활용하자.md -------------------------------------------------------------------------------- /Android Tool/R8을 통해 효율적으로 앱을 최적화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Android Tool/R8을 통해 효율적으로 앱을 최적화하자.md -------------------------------------------------------------------------------- /Architecture/Android App Architecture/Analytics 로직은 DataSource나 Repository로 분리하지 말자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Architecture/Android App Architecture/Analytics 로직은 DataSource나 Repository로 분리하지 말자.md -------------------------------------------------------------------------------- /Architecture/Android App Architecture/Repository 또는 DataSource에서 앱 실행 중 캐시가 필요한 데이터를 저장하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Architecture/Android App Architecture/Repository 또는 DataSource에서 앱 실행 중 캐시가 필요한 데이터를 저장하자.md -------------------------------------------------------------------------------- /Architecture/Clean Architecture/Mapper 클래스를 통해 컴포넌트 간 의존성의 방향을 제어하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Architecture/Clean Architecture/Mapper 클래스를 통해 컴포넌트 간 의존성의 방향을 제어하자.md -------------------------------------------------------------------------------- /Architecture/Clean Architecture/Repository를 인터페이스와 구현체로 분리하는 이유.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Architecture/Clean Architecture/Repository를 인터페이스와 구현체로 분리하는 이유.md -------------------------------------------------------------------------------- /Architecture/Clean Architecture/도메인 모델에 의존값을 포함하지 말자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Architecture/Clean Architecture/도메인 모델에 의존값을 포함하지 말자.md -------------------------------------------------------------------------------- /Architecture/Clean Architecture/재사용을 위해 코드를 추출하는 경우 단일 책임 원칙을 고려하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Architecture/Clean Architecture/재사용을 위해 코드를 추출하는 경우 단일 책임 원칙을 고려하자.md -------------------------------------------------------------------------------- /Clean Code/객체는 사용하는 경우에만 생성하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Clean Code/객체는 사용하는 경우에만 생성하자.md -------------------------------------------------------------------------------- /Clean Code/결과를 처리할 때는 예외보다 Failure를 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Clean Code/결과를 처리할 때는 예외보다 Failure를 활용하자.md -------------------------------------------------------------------------------- /Clean Code/분기 처리 시 다른 조건에 의존적인 조건은 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Clean Code/분기 처리 시 다른 조건에 의존적인 조건은 지양하자.md -------------------------------------------------------------------------------- /Clean Code/사용자 정의 오류보다 표준 오류를 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Clean Code/사용자 정의 오류보다 표준 오류를 사용하자.md -------------------------------------------------------------------------------- /Clean Code/일반적인 알고리즘을 구현하는 경우 제네릭을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Clean Code/일반적인 알고리즘을 구현하는 경우 제네릭을 사용하자.md -------------------------------------------------------------------------------- /Clean Code/타입 파라미터의 섀도잉을 피하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Clean Code/타입 파라미터의 섀도잉을 피하자.md -------------------------------------------------------------------------------- /Coding Principles/로직과 알고리즘을 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Coding Principles/로직과 알고리즘을 구분하자.md -------------------------------------------------------------------------------- /Coding Principles/설계와 아키텍처 개념을 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Coding Principles/설계와 아키텍처 개념을 구분하자.md -------------------------------------------------------------------------------- /Compose/Compose 뷰에서 무거운 연산 작업을 하는 경우에는 remember에 key 값을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Compose 뷰에서 무거운 연산 작업을 하는 경우에는 remember에 key 값을 사용하자.md -------------------------------------------------------------------------------- /Compose/Compose 컴포넌트를 구현할 때 Material에 대한 의존성을 최소화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Compose 컴포넌트를 구현할 때 Material에 대한 의존성을 최소화하자.md -------------------------------------------------------------------------------- /Compose/Compose 화면 최초 진입 시 발생하는 사이드 이펙트는 LaunchedEffect(Unit)를 사용하지 말자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Compose 화면 최초 진입 시 발생하는 사이드 이펙트는 LaunchedEffect(Unit)를 사용하지 말자.md -------------------------------------------------------------------------------- /Compose/Compose에서 블러 효과를 구현하는 다양한 방식을 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Compose에서 블러 효과를 구현하는 다양한 방식을 구분하자.md -------------------------------------------------------------------------------- /Compose/Compose의 상태는 메인 스레드에서만 접근하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Compose의 상태는 메인 스레드에서만 접근하자.md -------------------------------------------------------------------------------- /Compose/DisposableEffect를 통해 생명주기에 따라 정리가 필요한 사이드 이펙트를 처리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/DisposableEffect를 통해 생명주기에 따라 정리가 필요한 사이드 이펙트를 처리하자.md -------------------------------------------------------------------------------- /Compose/ImageVector와 PainterResource를 적절히 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/ImageVector와 PainterResource를 적절히 사용하자.md -------------------------------------------------------------------------------- /Compose/Layout Inspector를 이용해 컴포넌트 트리 구조와 리컴포지션 상태를 파악하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Layout Inspector를 이용해 컴포넌트 트리 구조와 리컴포지션 상태를 파악하자.md -------------------------------------------------------------------------------- /Compose/Modifier 함수 간의 순서를 고려하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Modifier 함수 간의 순서를 고려하자.md -------------------------------------------------------------------------------- /Compose/Modifier.clip()으로 컴포넌트를 원하는 형태로 자르자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Modifier.clip()으로 컴포넌트를 원하는 형태로 자르자.md -------------------------------------------------------------------------------- /Compose/Modifier.drawWithCache()를 통해 컴포저블 뷰를 Bitmap 이미지로 변환하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Modifier.drawWithCache()를 통해 컴포저블 뷰를 Bitmap 이미지로 변환하자.md -------------------------------------------------------------------------------- /Compose/Modifier.offset()은 다른 컴포넌트와 독립적인 경우에만 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Modifier.offset()은 다른 컴포넌트와 독립적인 경우에만 사용하자.md -------------------------------------------------------------------------------- /Compose/Modifier에 role을 명시하여 접근성을 개선하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Modifier에 role을 명시하여 접근성을 개선하자.md -------------------------------------------------------------------------------- /Compose/Nested Graph를 통해 복잡한 Compose 네비게이션 동작을 구현하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Nested Graph를 통해 복잡한 Compose 네비게이션 동작을 구현하자.md -------------------------------------------------------------------------------- /Compose/PreviewParameterProvider를 통해 프리뷰의 상태별 파라미터를 주입하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/PreviewParameterProvider를 통해 프리뷰의 상태별 파라미터를 주입하자.md -------------------------------------------------------------------------------- /Compose/Scaffold 하단에 독립적인 버튼이 있는 경우 bottomBar를 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Scaffold 하단에 독립적인 버튼이 있는 경우 bottomBar를 사용하자.md -------------------------------------------------------------------------------- /Compose/Scaffold에 paddingValues를 지정하여 BottomBar 크기를 고려하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Scaffold에 paddingValues를 지정하여 BottomBar 크기를 고려하자.md -------------------------------------------------------------------------------- /Compose/Screen 단에서의 HiltViewModel 생성을 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Screen 단에서의 HiltViewModel 생성을 지양하자.md -------------------------------------------------------------------------------- /Compose/Slot Pattern을 통해 컴포저블의 특정 영역을 외부에서 자유롭게 구성하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/Slot Pattern을 통해 컴포저블의 특정 영역을 외부에서 자유롭게 구성하자.md -------------------------------------------------------------------------------- /Compose/ViewModel을 공유하여 XML 기반의 뷰에서 ComposeView의 상태를 바꾸자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/ViewModel을 공유하여 XML 기반의 뷰에서 ComposeView의 상태를 바꾸자.md -------------------------------------------------------------------------------- /Compose/snapshotFlow로 State를 Flow로 변환하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/snapshotFlow로 State를 Flow로 변환하자.md -------------------------------------------------------------------------------- /Compose/throttleClickable을 통해 중복된 클릭 이벤트를 제한하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/throttleClickable을 통해 중복된 클릭 이벤트를 제한하자.md -------------------------------------------------------------------------------- /Compose/비전역적인 ModalBottomSheet 사용을 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/비전역적인 ModalBottomSheet 사용을 지양하자.md -------------------------------------------------------------------------------- /Compose/사이드 이펙트가 발생하는 로직은 LaunchedEffect 스코프 내부에서 호출하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/사이드 이펙트가 발생하는 로직은 LaunchedEffect 스코프 내부에서 호출하자.md -------------------------------------------------------------------------------- /Compose/액티비티를 탐색하여 참조해야하는 경우 baseContext를 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/액티비티를 탐색하여 참조해야하는 경우 baseContext를 활용하자.md -------------------------------------------------------------------------------- /Compose/점진적으로 Compose로 마이그레이션하는 전략을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Compose/점진적으로 Compose로 마이그레이션하는 전략을 사용하자.md -------------------------------------------------------------------------------- /Data Structure/불변하면 Set, 순서가 상관 없으면 HashSet, 순서가 보장되어야 하면 MutableSet을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Data Structure/불변하면 Set, 순서가 상관 없으면 HashSet, 순서가 보장되어야 하면 MutableSet을 사용하자.md -------------------------------------------------------------------------------- /Database/DB 작업 시 Delete와 Update를 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Database/DB 작업 시 Delete와 Update를 지양하자.md -------------------------------------------------------------------------------- /Git/Rebase와 Merge를 적절히 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Git/Rebase와 Merge를 적절히 사용하자.md -------------------------------------------------------------------------------- /Github/Github 라이선스 종류를 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Github/Github 라이선스 종류를 구분하자.md -------------------------------------------------------------------------------- /Language/Java/Okhttp WebSocket을 통해 소켓 통신을 구현하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Java/Okhttp WebSocket을 통해 소켓 통신을 구현하자.md -------------------------------------------------------------------------------- /Language/Kotlin/@DslMarker를 활용하여 외부 리시버 사용을 제한하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/@DslMarker를 활용하여 외부 리시버 사용을 제한하자.md -------------------------------------------------------------------------------- /Language/Kotlin/@Throws를 사용하는 경우.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/@Throws를 사용하는 경우.md -------------------------------------------------------------------------------- /Language/Kotlin/Collection과 Sequence를 적절히 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Collection과 Sequence를 적절히 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/Coroutine/Mutex를 통해 자원에 대한 동시 접근을 제한하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Coroutine/Mutex를 통해 자원에 대한 동시 접근을 제한하자.md -------------------------------------------------------------------------------- /Language/Kotlin/Coroutine/ViewModelScope 대신 CoroutineScope를 사용해야하는 경우.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Coroutine/ViewModelScope 대신 CoroutineScope를 사용해야하는 경우.md -------------------------------------------------------------------------------- /Language/Kotlin/Coroutine/withTimeout()으로 코루틴 동작에 타임아웃을 설정하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Coroutine/withTimeout()으로 코루틴 동작에 타임아웃을 설정하자.md -------------------------------------------------------------------------------- /Language/Kotlin/Coroutine/코루틴의 데이터 공유 상태로 인한 문제를 해결하는 다양한 방법을 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Coroutine/코루틴의 데이터 공유 상태로 인한 문제를 해결하는 다양한 방법을 구분하자.md -------------------------------------------------------------------------------- /Language/Kotlin/Enum 타입에 대해 분기 처리가 복잡해지는 경우 Enum 클래스의 프로퍼티를 통해 상태를 캡슐화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Enum 타입에 대해 분기 처리가 복잡해지는 경우 Enum 클래스의 프로퍼티를 통해 상태를 캡슐화하자.md -------------------------------------------------------------------------------- /Language/Kotlin/Object를 사용하는 이유.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Object를 사용하는 이유.md -------------------------------------------------------------------------------- /Language/Kotlin/Spread 연산자(*)를 이용해 배열이나 컬렉션 요소를 개별 인자로 변환하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Spread 연산자(*)를 이용해 배열이나 컬렉션 요소를 개별 인자로 변환하자.md -------------------------------------------------------------------------------- /Language/Kotlin/Unit?을 리턴하지 말자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/Unit?을 리턴하지 말자.md -------------------------------------------------------------------------------- /Language/Kotlin/close 대신 use를 사용하여 리소스를 해제하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/close 대신 use를 사용하여 리소스를 해제하자.md -------------------------------------------------------------------------------- /Language/Kotlin/inferred 타입으로 리턴하지 말자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/inferred 타입으로 리턴하지 말자.md -------------------------------------------------------------------------------- /Language/Kotlin/inner class 대신 nested class를 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/inner class 대신 nested class를 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/let을 적절한 상황에 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/let을 적절한 상황에 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/require 함수를 통해 함수 argument에 제한을 걸자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/require 함수를 통해 함수 argument에 제한을 걸자.md -------------------------------------------------------------------------------- /Language/Kotlin/runCatching, mapCatching, recoverCatching을 통해 안전하게 예외를 처리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/runCatching, mapCatching, recoverCatching을 통해 안전하게 예외를 처리하자.md -------------------------------------------------------------------------------- /Language/Kotlin/sealed class와 enum class를 적절히 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/sealed class와 enum class를 적절히 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/variance 한정자를 통해 제너릭의 타입 간 관련성을 관리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/variance 한정자를 통해 제너릭의 타입 간 관련성을 관리하자.md -------------------------------------------------------------------------------- /Language/Kotlin/가변성을 제한하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/가변성을 제한하자.md -------------------------------------------------------------------------------- /Language/Kotlin/단발성 이벤트 처리 시 Flow 대신 Channel을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/단발성 이벤트 처리 시 Flow 대신 Channel을 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/멤버 확장 함수 사용을 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/멤버 확장 함수 사용을 지양하자.md -------------------------------------------------------------------------------- /Language/Kotlin/변수 타입이 명확하지 않은 경우 확실하게 지정하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/변수 타입이 명확하지 않은 경우 확실하게 지정하자.md -------------------------------------------------------------------------------- /Language/Kotlin/변수의 스코프를 최소화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/변수의 스코프를 최소화하자.md -------------------------------------------------------------------------------- /Language/Kotlin/성능이 중요한 경우에 기본 자료형 배열을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/성능이 중요한 경우에 기본 자료형 배열을 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/연산자 오버로딩 시 의미에 맞게 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/연산자 오버로딩 시 의미에 맞게 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/예외를 활용해 코드에 제한을 걸자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/예외를 활용해 코드에 제한을 걸자.md -------------------------------------------------------------------------------- /Language/Kotlin/일반적인 프로퍼티의 행위는 프로퍼티 위임으로 추출하여 재사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/일반적인 프로퍼티의 행위는 프로퍼티 위임으로 추출하여 재사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/지역 스코프에서는 mutable 컬렉션을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/지역 스코프에서는 mutable 컬렉션을 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/컬렉션의 처리 단계 수를 제한하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/컬렉션의 처리 단계 수를 제한하자.md -------------------------------------------------------------------------------- /Language/Kotlin/클래스 생성 중 초기화할 수 없는 프로퍼티는 lateinit과 Delegates.notNull을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/클래스 생성 중 초기화할 수 없는 프로퍼티는 lateinit과 Delegates.notNull을 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/프로퍼티와 함수를 적절히 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/프로퍼티와 함수를 적절히 사용하자.md -------------------------------------------------------------------------------- /Language/Kotlin/플랫폼 타입 사용을 지양하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/플랫폼 타입 사용을 지양하자.md -------------------------------------------------------------------------------- /Language/Kotlin/함수와 메서드의 차이를 이해하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/함수와 메서드의 차이를 이해하자.md -------------------------------------------------------------------------------- /Language/Kotlin/확장 함수 구현 시 메모리를 고려하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Language/Kotlin/확장 함수 구현 시 메모리를 고려하자.md -------------------------------------------------------------------------------- /Network/GET 통신 시에 Body 요청을 지양하는 이유.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Network/GET 통신 시에 Body 요청을 지양하는 이유.md -------------------------------------------------------------------------------- /Network/URL은 소문자로 구성하되, 단어를 구분할 때는 하이픈(-)을 사용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Network/URL은 소문자로 구성하되, 단어를 구분할 때는 하이픈(-)을 사용하자.md -------------------------------------------------------------------------------- /Network/안드로이드에서 딥링크를 구현하는 다양한 방법을 구분하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Network/안드로이드에서 딥링크를 구현하는 다양한 방법을 구분하자.md -------------------------------------------------------------------------------- /Object-Oriented Programming/재사용이 필요할 때 인터페이스를 적극 활용하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Object-Oriented Programming/재사용이 필요할 때 인터페이스를 적극 활용하자.md -------------------------------------------------------------------------------- /Office Life /QA 가능한 방법을 고려하여 기능을 개발하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /QA 가능한 방법을 고려하여 기능을 개발하자.md -------------------------------------------------------------------------------- /Office Life /새로운 버전의 앱을 배포할 때에는 이전 버전과의 호환성을 확인하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /새로운 버전의 앱을 배포할 때에는 이전 버전과의 호환성을 확인하자.md -------------------------------------------------------------------------------- /Office Life /스테이징 서버를 통해 운영 서버와 유사한 환경에서 검증하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /스테이징 서버를 통해 운영 서버와 유사한 환경에서 검증하자.md -------------------------------------------------------------------------------- /Office Life /의사 전달 시 문서화를 습관화하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /의사 전달 시 문서화를 습관화하자.md -------------------------------------------------------------------------------- /Office Life /코드 구조를 설계할 때는 설계하지 않았을 때의 문제점을 먼저 파악하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /코드 구조를 설계할 때는 설계하지 않았을 때의 문제점을 먼저 파악하자.md -------------------------------------------------------------------------------- /Office Life /프로젝트 설계 단계에서 Tech Spec 문서를 통해 목표와 개발 범위를 정리하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /프로젝트 설계 단계에서 Tech Spec 문서를 통해 목표와 개발 범위를 정리하자.md -------------------------------------------------------------------------------- /Office Life /확장 가능성이 있는 기능은 서버에서 동적으로 수정 가능하도록 설계하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Office Life /확장 가능성이 있는 기능은 서버에서 동적으로 수정 가능하도록 설계하자.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/README.md -------------------------------------------------------------------------------- /Test/단위 테스트의 장단점과 활용하기 적합한 케이스를 파악하자.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/b1urrrr/til/HEAD/Test/단위 테스트의 장단점과 활용하기 적합한 케이스를 파악하자.md --------------------------------------------------------------------------------