kotlin
-
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) 핵심 특징구조: 원형 배..
-
[Code Readability] 2장 Namingkotlin/[Book] Code Readability 2025. 10. 24. 23:58
어떤 이름이 좋은 이름인가?의미가 정확해야함isVisible은 소리를 위한 것이 아니다.충분히 설명적이어야 함width/height rather than w/h이름에 사용하는 문법왜 문법이 중요한가?CallbackEventMessageClickViewText는 무엇일까?좋지 않은 이름, 다양한 해석이 된다.A text of a click view? of a callback event message?MessageTextViewClickEventCallback?callback으로 읽힌다.A callback of click events on a message text view중요한 부분은 올바른 어순이라면 명사로써 뒷부분에 정의된다.명사: class, variable( including property fun..
-
[Code Readability] 1장 도입과 원칙kotlin/[Book] Code Readability 2025. 10. 24. 23:58
가독성이 좋은 코드란?분명해야하고, 간단해야 하고 독립적이어야 하고, 구조적이어야 한다.프로덕트의 규모가 커질수록 코드를 작성하는 것보다 읽는 시간이 더 많아진다.쓰기 편한코드보다 읽기 쉬운 코드가 더 중요하다.프로덕트의 규모가 큰 경우에만 중요하고, 일시적으로 사용하는 코드는 괜찮다.가독성을 개선하는 방법기술, 지식을 목적을 생각해서 선택해야 한다.기술 자체를 사용해보고 싶어서 사용하면 안된다.가치가 있다면 복잡해도 된다.자동 검증을 최대한 활용한다.컴파일러, 테스트 등을 더 신뢰된다.더 자주 논의 하라팀원들과 만들면서 계속 이야기한다.계속 배우자가독성이 높은 코드를 작성하려면 여러 공부가 필요하다.강의, 훈련, 책, 온라인 기사, 코드 리뷰, 페어 프로그래밍PolicyThe boy scout rule..
-
Circular Dependency (순환 참조) 문제와 해결 방법kotlin 2025. 4. 27. 17:29
개발을 하다 보면 클래스 간의 의존성이 서로 얽히는 "써큘러 디펜던시(Circular Dependency)" 문제를 종종 만나게 됩니다. 이번 글에서는 코틀린(Kotlin) 코드로 순환 의존성의 문제를 살펴보고, 이를 lazy 초기화, 의존성 역전 원칙(DIP) 등을 통해 해결하는 방법을 예제와 다이어그램을 곁들여 정리해보겠습니다.1. 써큘러 디펜던시란?써큘러 디펜던시(Circular Dependency)는 두 개 이상의 클래스가 서로를 직접 또는 간접적으로 참조해서 순환 참조가 발생하는 상황을 말합니다. 이는 프로그램의 컴파일 또는 실행 과정에서 오류를 유발할 수 있습니다.문제 예제class A(private val b: B)class B(private val a: A)A는 B를 필요로 하고, B는 A..
-
Kotlin에서 예외 처리와 스택 추적 이해하기: data object vs classkotlin 2025. 4. 3. 10:44
Kotlin에서 예외 처리 시 스택 추적(Stack Trace)은 디버깅과 문제 해결에 중요한 역할을 합니다. 이 글에서는 data object와 class를 사용하여 예외를 정의할 때의 차이점과 예외 객체가 생성될 때 스택 추적이 어떻게 기록되는지 설명합니다.1. data object와 class의 차이Kotlin에서 예외를 정의할 때 data object와 class를 사용할 수 있습니다. 두 방식은 예외 객체의 생성과 스택 추적 기록에 있어 중요한 차이를 가집니다.data object: 싱글톤 패턴으로 동작하여 프로그램 실행 중 단 하나의 인스턴스만 존재합니다. 예외를 던질 때마다 동일한 인스턴스를 사용하므로, 스택 추적은 객체가 초기화된 시점의 정보를 반영합니다.class: 새로운 인스턴스를 생성..
-
Mockito를 활용한 모의 객체 설정: thenReturn vs doReturnkotlin/Test 2024. 12. 2. 23:31
thenReturn사용법:when(mock.method()).thenReturn(value)용도:주로 open 메서드나 인터페이스의 메서드를 모의할 때 사용합니다.특징:메서드 호출이 실제로 발생해야 하며, null이 아닌 값을 반환해야 합니다.동작 방식:Mockito가 바이트코드를 조작하여 메서드 호출을 가로채는 방식으로 동작합니다.그렇기 때문에 메서드 호출이 실제로 발생해야 하며, final, private, static 메서드에는 사용할 수 없습니다.제약:final, private, static 메서드에는 사용할 수 없습니다.장점:when-thenReturn로 가독성과 명확한 의도를 보여줄 수 있고, 디버깅 정보가 명확하다.가독성: 코드가 직관적이고 읽기 쉽습니다.일관성: 일반적인 Mockito 사용..