profile
한걸음이라도 제대로... 쓰임있는 앱을 만들자

코틀린 코루틴에서 suspend, Coroutine, Flow 이해하기 - 핵심 소비/변환 패턴: collect, collectLatest, stateIn, collectAsStateWithLifecycle

Kotlin 코루틴은 비동기 처리를 구조적으로 표현하기 위한 언어/라이브러리 조합이다.thread blocking을 피하면서도 코드 흐름을 직관적으로 유지하는 것을 목표로 한다.이 글에서는 suspend, 코루틴, Flow의 관계와 함께, 실제 Android 환경에서

2025년 12월 8일
·
0개의 댓글
·

Jetpack Compose (Runtime / Internals) - Runtime의 Snapshot 구조 정리

Compose Runtime이 상태(State) 의 변경을 감지하고UI 재구성을 효율적으로 수행하기 위해 사용하는 데이터 일관성(Consistency) 관리 시스템입니다.간단히 말해,“현재 상태가 어떤 값인지”“어떤 컴포저블이 그 값을 참조 중인지”“값이 바뀌었을 때

2025년 11월 9일
·
0개의 댓글
·

Jetpack Compose - 런타임, 코루틴 스코프, 바텀모달시트 관계

Jetpack Compose의 UI 생명주기와 상태 추적을 관리하는 시스템입니다.Compose는 선언형 UI → “UI = 상태(state)의 함수”Compose Runtime은 내부적으로 상태 변경을 감지하고, 필요한 부분만 재구성(Recomposition) 합니다.

2025년 11월 9일
·
0개의 댓글
·

Jetpack Compose - hoisting, 재구성

재구성(Recomposition) 중에도 값을 유지하기 위한 “상태 저장 장치”상태(State)가 변할 때, 해당 상태를 참조하는 UI만 다시 그리는 과정“상태를 자식이 아니라 부모 쪽에서 기억하고 관리한다”는 의미입니다.이렇게 하면 부모가 상태를 제어하고, 자식은 단

2025년 11월 9일
·
0개의 댓글
·

Kotlin 문법 - Coroutine Flow

비동기 데이터를 다루는 가장 코틀린스러운 방법.Flow는 비동기적으로 여러 값을 순차적으로 내보내는(emit) 데이터 스트림이에요.데이터를 한 번에 다 가져오지 않고, 필요할 때마다 값을 흘려보내는 구조라고 보면 됩니다.→ 대부분의 경우 Cold Flow로 충분하며,H

2025년 10월 22일
·
0개의 댓글
·

Kotlin 문법 - 컬렉션 기본 문법( List, Set, Map)

Kotlin 컬렉션은 List / Set / Map으로 나뉘며, 각각 읽기 전용과 가변 형태가 있다.읽기 전용: List<T>, Set<T>, Map<K, V>가변: MutableList<T>, MutableSet<T>, MutableMap&

2025년 10월 16일
·
0개의 댓글
·

Kotlin 문법 - inline, crossinline, noinlin

“함수 호출을 인라인(복붙) 하여 호출 오버헤드를 줄이는 키워드”일반 함수는 호출 시 스택에 함수를 넣고 실행하지만, inline 함수는 컴파일 시 함수 본문을 호출 위치에 그대로 삽입합니다. 즉, 함수 호출 비용(call overhead) 을 제거해줍니다.컴파일

2025년 10월 15일
·
0개의 댓글
·

Kotlin 문법 - it, .map, .filter

Kotlin에서 컬렉션(List, Map, Set 등)을 다룰 때 자주 사용하는 함수형 고차함수(Higher-Order Functions) 들이 있습니다.그중에서도 map, filter, 그리고 람다식의 기본 매개변수 it 은가장 자주 등장하는 핵심 문법이다.람다식에서

2025년 10월 13일
·
0개의 댓글
·

Kotlin 문법 - lateinit

lateinit은 "나중에 초기화하겠다"(late initialization)는 의미를 가진 키워드입니다.보통 val(읽기 전용)에는 사용할 수 없고, var(가변 변수) 와 Non-null 타입에만 적용됩니다.즉, 선언 시 값을 할당하지 않고, 나중에 꼭 초기화할 것

2025년 9월 29일
·
0개의 댓글
·

Kotlin 문법 - init

코틀린에서 init 키워드는 초기화 블록(Initializer Block)을 정의하는 데 사용됩니다. 이는 클래스의 인스턴스가 생성될 때 실행되는 코드를 포함합니다.init 블록은 클래스의 인스턴스를 생성할 때 (생성자가 호출될 때) 실행되는 코드 블록입니다.주로 클래

2025년 9월 29일
·
0개의 댓글
·

Kotlin문법 - 특별한 타입들: Unit, Any, Nothing

코틀린은 자바의 타입 시스템을 개선하여 Unit, Any, Nothing 이라는 세 가지 특별한 타입을 제공합니다. 이들은 함수의 반환, 타입 계층, 예외 처리를 명확하게 정의하는 데 중요한 역할을 합니다. 1. Unit: 반환값이 없는 함수 정의: 반환 값이 없음을 나타내는 타입 (자바의 void와 유사). 차이점: void는 키워드지만, Unit은...

2025년 9월 24일
·
0개의 댓글
·

Kotlin 문법 - 코루틴 기초 (Coroutine 소개)

코루틴(Coroutine)비동기 작업을 간단하게 처리할 수 있도록 돕는 경량 스레드수천 개를 동시에 실행해도 스레드보다 부담이 적음suspend 함수일시 중단 가능한 함수다른 suspend 함수나 코루틴 안에서만 호출 가능메인 스레드를 차단하지 않고, 비동기적으로 실행

2025년 8월 24일
·
0개의 댓글
·

Kotlin 문법 - 고차 함수 및 콜백 함수 (람다 활용)

고차 함수(Higher-Order Function)함수를 인자로 받거나, 함수를 반환하는 함수Kotlin에서 콜백 함수를 간단히 구현할 수 있음람다 표현식{ parameter -> body } 형식파라미터가 하나일 경우 it 키워드로 축약 가능마지막 인자가 함수일 경우

2025년 8월 20일
·
0개의 댓글
·

백준 14626번 - ISBN

문제 링크ISBN(International Standard Book Number)은 전 세계 모든 도서에 부여된 고유번호로, 국제 표준 도서번호이다. ISBN에는 국가명, 발행자 등의 정보가 담겨 있으며 13자리의 숫자로 표시된다. 그중 마지막 숫자는 체크기호로 ISB

2025년 8월 20일
·
0개의 댓글
·

Kotlin 문법 - 타입 확인과 형 변환 (`is`, `as`)

is 연산자를 이용해 객체가 특정 타입인지 확인 가능is가 true로 확인되면 스마트 캐스트(Smart Cast) 기능이 적용되어, 별도의 형 변환 없이 해당 타입의 멤버를 바로 사용 가능!is 를 사용하면 반대(특정 타입이 아닌 경우) 확인 가능as 연산자를 사용하면

2025년 8월 19일
·
0개의 댓글
·

백준 30802번 - 웰컴 키트

문제 링크2024년 2월 3일 개최 예정인 온사이트 그랜드 아레나에서는 참가자들에게 티셔츠 한 장과 펜 한 자루가 포함된 웰컴 키트를 나눠줄 예정입니다. 키트를 제작하는 업체는 다음과 같은 조건으로만 주문이 가능합니다.티셔츠는 S, M, L, XL, XXL, 그리고 X

2025년 8월 19일
·
0개의 댓글
·

Kotlin 문법 - 상속 (`extends`)과 인터페이스 구현

코틀린에서 클래스는 기본적으로 final (상속 불가)상속이 필요하다면 클래스 선언 앞에 open 키워드를 붙여야 함메소드나 프로퍼티도 기본적으로 오버라이드 불가 → open 키워드 필요오버라이드 시 반드시 override 키워드 사용interface 키워드로 선언여러

2025년 8월 18일
·
0개의 댓글
·

Kotlin 문법 - Backing Field 개념

프로퍼티를 정의할 때, 코틀린이 자동으로 생성해주는 실제 값을 저장하는 공간getter/setter를 직접 정의할 때 프로퍼티를 자기 자신으로 참조하면 무한 루프에 빠질 수 있음 → 이를 막기 위해 field라는 키워드를 사용field → 프로퍼티의 backing fi

2025년 8월 18일
·
0개의 댓글
·

Kotlin 문법 - 접근자, 게터/세터 (`getter`, `setter`)

val → 읽기 전용(기본적으로 getter만 생성)var → 읽기/쓰기 가능(getter, setter 모두 생성)private set → 외부에서 setter 접근 차단 (읽기 전용처럼 사용 가능)get() → 커스텀 게터 정의 가능 (field 키워드를 사용)da

2025년 8월 18일
·
0개의 댓글
·

백준 1546번 - 평균

문제 링크세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M\*100으로 고쳤다.예를 들어, 세준이의 최고점이 70이고, 수학점수가 50

2025년 8월 18일
·
0개의 댓글
·