전체 글
-
[Code Readability] 5장 읽기 쉬운 함수(function)kotlin/[Book] Code Readability 2025. 11. 9. 12:07
Objective**“읽기 쉬운 함수(Readability)”**란,이름만 봐도 동작을 예측할 수 있고,한 번 훑기만 해도 전체 흐름이 보이는 함수를 말한다.이 문서는 함수의 책임, 흐름, 구조화 원칙을 통해 이를 달성하는 방법을 설명한다.Key Results[KR1] 한 문장으로 요약되지 않는 함수는 반드시 분리한다.[KR2] Command와 Query는 분리하여 예측 가능한 동작을 보장한다.[KR3] 중첩 호출이나 체이닝을 줄이고, 의미 있는 이름으로 정의 기반 프로그래밍(Definition-based Programming) 을 수행한다.[KR4] Happy Path 중심 구조로 설계하여, 비정상 케이스를 초기에 걸러낸다.[KR5] 조건이 아닌 객체(Object) 를 기준으로 분기와 책임을 분리한다...
-
[Code Readability] 3장 코드 가독성을 높이는 주석(Comment) 작성 원칙kotlin/[Book] Code Readability 2025. 11. 9. 10:33
Objective코드의 가독성(Readability) 과 유지보수성(Maintainability) 을 높이기 위해 주석(Comment)을 의미 있게, 필요한 곳에만, 명확하게 작성하는 원칙을 이해하고 실천한다.Key Results[KR1] 코드 자체로 설명 가능한 경우, 주석을 생략한다.[KR2] 주석은 “무엇을 하는가(What)”보다 “왜 이렇게 하는가(Why)”에 집중한다.[KR3] 주석의 종류(Documentation / Informal / TODO 등)에 따라 목적과 사용 위치를 구분한다.[KR4] 불필요한 주석을 없애기 위해 코드 리팩토링을 적극적으로 수행한다.[KR5] 주석이 코드의 “행동”이 아닌 “의도”를 설명하도록 작성한다.Part 1. 주석의 개념과 목적개념주석(Comment)은 코드 ..
-
[Code Readability] 4장 상태(State)kotlin/[Book] Code Readability 2025. 11. 9. 10:16
Objective코드의 가독성과 안정성을 향상시키기 위해, 상태(State)와 변수 관계를 명확히 설계하고 유지한다.Key Results변수 간 관계를 독립적(orthogonal)으로 유지한다.불변성(immutability)과 멱등성(idempotence)을 통해 상태 전이의 일관성을 확보한다.순환적(cyclic) 상태는 최소화하고, 가능한 한 비순환(acyclic) 구조를 유지한다.KR1. 변수 간 관계 관리 (Relationship between Variables)문제서로 종속적인 변수가 존재하면 잘못된 상태(illegal state)가 발생할 수 있다.class CoinState(val coinCount: Int, val coinText: String)// 잘못된 상태 가능val state = Co..
-
코루틴 테스트 환경(runTest vs UnconfinedTestDispatcher) 완벽 이해하기kotlin/coroutine 2025. 10. 31. 22:48
ObjectiveCompose 및 ViewModel 테스트에서 적절한 코루틴 테스트 환경을 선택하고, 안정적이고 예측 가능한 테스트를 구현한다.Key ResultsKR1. runTest 와 TestScope + TestDispatcher 의 차이를 명확히 이해한다.항목runTestTestScope + TestDispatcher스코프 생성자동 생성수동 생성시간 제어가상 시간 (advanceTimeBy 등) 가능실제 시간 기반정리(cleanup)자동 정리직접 관리 필요DI 주입제한적명시적 주입 용이권장 사용처단순 비동기 단위 테스트ViewModel, Compose, DI 환경핵심 요약:runTest → 테스트 코루틴의 표준 진입점, 가상 시간 제어 가능TestScope + TestDispatcher → 유연..
-
[Code Readability] 6장 의존 관계와 결합도(Coupling)kotlin/[Book] Code Readability 2025. 10. 31. 00:07
1. 의존 관계(Dependency)한 클래스나 모듈이 다른 클래스나 모듈의 존재에 의존할 때 발생합니다.예시:class UserRepository { fun getUser(id: Int): User = ...}class UserService( private val repository: UserRepository // 🔸 UserService는 UserRepository에 의존) { fun loadUser(id: Int) = repository.getUser(id)}2. 결합도(Coupling)의존 관계의 강도(strength) 를 나타냅니다.결합도가 높을수록 코드 변경 시 영향 범위가 커집니다.따라서 “약한 결합(Loose Coupling)”이 바람직합니다. 3. 결합도의 종류 및..
-
Flow의 UnitTest를 손쉽게 만드는 방법kotlin/Test 2025. 10. 28. 00:20
OKRObjectiveKotlin의 Flow/StateFlow를 app.cash.turbine으로 안정적으로 테스트하고, Android 프로젝트에서 재사용 가능한 테스트 패턴을 확립한다.Key ResultsTurbine의 기본 개념과 장점을 이해한다.Flow/StateFlow 테스트를 위한 핵심 API와 패턴을 습득한다.runTest·가상 시간·advanceUntilIdle와 함께 Turbine을 올바르게 사용한다.실제 Android 코드(예: ViewModel 상태 스트림)를 검증하는 테스트 템플릿을 확보한다.1) Turbine 개요Turbine은 Kotlin Flow를 테스트하기 위한 경량 라이브러리다.test { ... } 블록에서 스트림을 수집하고, awaitItem() 같은 API로 방출 값을 ..
-
ArrayDeque를 Deferred collection으로 사용하는 이유kotlin 2025. 10. 27. 23:32
OKRObjectiveKotlin 표준 라이브러리의 ArrayDeque를 이해하고, Android와 코루틴 환경에서 안전하고 효율적으로 활용한다.Key ResultsArrayDeque의 동작 원리와 핵심 메서드를 숙지한다.실전에서 자주 쓰는 활용 시나리오와 Deferred 큐 패턴을 익힌다.코루틴 동시성 이슈와 안전한 사용 패턴을 적용한다.다른 자료구조와의 차이를 이해해 올바르게 선택한다.1) 개요ArrayDeque는 양방향 큐(Double-ended Queue)로, 앞과 뒤 양쪽에서 빠르게 삽입과 삭제가 가능한 컬렉션이다.내부는 배열 기반(원형 버퍼)으로 구현되어 메모리 효율이 좋고, 큐/스택 용도에 적합하다.Kotlin 표준 라이브러리에 포함되어 별도 의존성이 필요 없다.2) 핵심 특징구조: 원형 배..
-
모듈 간 테스트 코드 공유하기 (Android Test Fixtures)Android 2025. 10. 26. 20:51
OKR (Objective & Key Results)Objective:Android Gradle의 testFixtures 기능을 이해하고,모듈 간 테스트 유틸과 더블(mock) 코드를 재사용할 수 있도록 한다.Key Results:testFixtures.enable = true의 역할을 명확히 설명할 수 있다.src/testFixtures 디렉토리를 구성해 공용 테스트 코드를 작성할 수 있다.다른 모듈에서 testFixtures를 불러오는 방법을 직접 적용할 수 있다.Test Fixtures란?테스트를 작성하다 보면 여러 테스트에서 공통으로 사용하는 코드가 생긴다.예를 들어 다음과 같은 코드들이다.테스트용 유틸리티 클래스더미 데이터 생성기Mock 객체공용 테스트 헬퍼이런 코드를 src/test/java에..