일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 멤버변수
- Rxjava Observable
- android ar 개발
- rxjava cold observable
- 스택 큐 차이
- 2022 플러터 안드로이드 스튜디오
- 클래스
- rxjava disposable
- 안드로이드 라이선스
- 플러터 설치 2022
- 서비스 vs 쓰레드
- 안드로이드 유닛 테스트
- 안드로이드 레트로핏 crud
- 서비스 쓰레드 차이
- 2022 플러터 설치
- 안드로이드 라이선스 종류
- android retrofit login
- jvm 작동 원리
- 객체
- 자바 다형성
- rxjava hot observable
- ANR이란
- 안드로이드 유닛 테스트 예시
- 큐 자바 코드
- 스택 자바 코드
- 안드로이드 os 구조
- ar vr 차이
- 안드로이드 유닛테스트란
- jvm이란
- 안드로이드 레트로핏 사용법
- Today
- Total
목록책 (108)
나만을 위한 블로그

몇 주 전 오픈톡방에서 코틀린 인 액션 2판이 2월 27일 출간 예정이라는 말을 듣고 홀린 듯이 예약주문을 걸었다. 그리고 28일 퇴근 후 책을 받았다.우선 전작보다 100쪽이 추가되어 책 두께가 매우 두꺼웠다. 학부생 시절 전공서적이 떠오르는 두께로 어디 들고 나가려면 큰 결심이 필요해 보인다. 그리고 코틀린 1.7을 타겟으로 잡았던 전작에 비해 사라지거나 더 세분화된 인덱스가 눈에 띄었다. 당장 눈에 띄는 건 DSL 파트의 안코를 다루던 챕터가 사라졌고, 2장 코틀린 기초 파트의 챕터명들이 좀 더 상세해지거나 새로 추가된 게 몇 개 있다.내용, 예제 코드 또한 전작에 비해 달라진 게 눈에 띈다. 아래는 when과 enum을 다루는 1판, 2판의 예시 코드다. 키워드에 아무 처리도 없던 1판과 달리..

이 책을 읽기 전까진 이어령이란 분을 몰랐다. 찾아보니 노태우 정권 시절 초대 문화부 장관을 역임하셨고 88 올림픽의 개회식, 폐회식 연출을 총괄하셨다고 한다.2년 정도 전에 서점에 진열된 저 연녹색 책을 보고 처음 존재를 알았고, 시대의 지성이라고 불리시는 거 같아서 나중에 읽을 책으로 써두고 지내다가 이제서야 다 읽게 됐다. 책은 인터뷰 형식으로 돼 있고 중간마다 인터뷰하는 기자의 혼잣말들이 들어가 있다. 그래서인지 읽으면서 내용에 완전히 집중하기 어려운 때가 몇 번 있었고, 나중에는 인터뷰가 아닌 기자의 혼잣말들은 전부 생략하고 읽기도 했다. 이것 때문인지 완전히 몰입해서 읽기에는 어려웠는데 예스24 등의 리뷰를 찾아보면 나만 그랬던 건 아닌 듯하다.내용은 한 번에 이해하기 어려운 내용이라 여러 번..
대부분 앱은 3계층으로 구분할 수 있다. 데이터 / 어댑터 계층도메인 계층표현 / api / UI 계층 각 계층에서 코루틴을 쓰는 일반적인 방법을 확인한다. 데이터 / 어댑터 계층 레포지토리, 프로바이더, 어댑터, 데이터 소스를 구현하는 계층이다.이 계층을 다루는 건 상대적으로 쉬운 편인데 인기 있는 여러 JVM 라이브러리가 기본적으로 or 몇 가지 의존성을 추가하는 걸로 코루틴을 지원하기 때문이다.레트로핏으로 요청을 정의한 함수를 블로킹 함수 대신 중단 함수로 만들려면 suspend를 추가한다. interface GithubApi { @GET("orgs/{organization}/repos?per_page=100") suspend fun getOrganizationRepos( @..
일반적으로 Flow는 콜드 데이터라 요청 시마다 값이 계산된다. 하지만 여러 수신자가 하나의 데이터가 바뀌는지 감지하는 경우도 있다. 이 때 메일링 리스트와 비슷한 SharedFlow를 쓴다. StateFlow는 감지 가능한 값과 비슷하다. SharedFlow SharedFlow로 메시지를 내보내면 대기 중인 모든 코루틴이 수신한다. import kotlinx.coroutines.coroutineScopeimport kotlinx.coroutines.delayimport kotlinx.coroutines.flow.MutableSharedFlowimport kotlinx.coroutines.launchsuspend fun main(): Unit = coroutineScope { val mutableS..
map Flow의 각 원소를 변환 함수에 따라 변환한다. 숫자들을 Flow로 갖고 있고 각 수의 제곱을 계산하는 연산이라면 생성된 Flow는 이 수들의 제곱을 값으로 갖는다. import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map suspend fun main() { flowOf(1, 2, 3) // [1, 2, 3] .map { it * it } // [1, 4, 9] .collect { print(it) }// 149 } map을 구현하려면 flow 빌더를 써서 새 Flow를 만들면 된다. 그리고 만들어진 Flow에서 원소들을 모으고 변형된 원소들을 하나씩 내보내면 된다. map은 값을 꺼내거나 다른 형태로 바꾸는 등으로 사용..

다산의 마지막 질문을 읽고 나서 본 책이다. 최근 바빠서 책 볼 시간을 잡지 못해 지하철에서 틈틈이 읽느라 예상보다 늦게 읽었다. 책 내용은 소학과 논어, 맹자 등 여러 고전의 내용과 예문을 발췌해서 구성됐다. 특히 소학의 내용이 많은데, 이 책 자체가 소학의 주요 구절 57개를 뽑아서 현대의 관점에서 풀어썼기 때문이다. 그렇다고 거창한 내용이 있는 건 아니다. 소학은 사서삼경 전에 읽는 입문서 같은 책이라서 읽다 보면 살면서 당연히 지켜야 하는 내용도 있고, 지키지 못했지만 습관으로 만들어야 하는 내용들이 대부분이다. 책 곳곳에서도 정리, 청소 따위의 사소한 일들을 강조한다. 하지만 매일 해야 한다는 조건이 붙으면 쉽지 않다. 하루쯤은, 오늘 기분이 어때서, 시간이 없어서, 날씨가 좋아서 따위의 변명과..
Flow는 요청이 한 방향으로 흐르고 요청으로 생성된 값이 다른 방향으로 흐르는 파이프라 할 수 있다. Flow가 끝나거나 예외 발생 시 이런 정보가 전달돼 중간 단계가 종료된다. 모든 정보가 Flow로 전달되므로 값, 예외, 시작 / 완료 등 다른 특정 이벤트를 감지할 수 있다. 아래 메서드들을 쓰면 된다. onEach Flow의 값을 하나씩 받기 위해 쓴다. import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.onEach suspend fun main() { flowOf(1, 2, 3, 4) .onEach..
원시값을 갖는 플로우 Flow를 만드는 가장 간단한 방법은 플로우가 어떤 값을 가져야 할지 정의하는 flowOf()를 쓰는 것이다. listOf()와 비슷하다. import kotlinx.coroutines.flow.flowOf suspend fun main() { flowOf(1, 2, 3, 4, 5) .collect { println(it) } } // 1 // 2 // 3 // 4 // 5 값이 없는 Flow가 필요하면 emptyFlow()를 쓰면 된다. emptyList()와 비슷하다. import kotlinx.coroutines.flow.emptyFlow suspend fun main() { emptyFlow() .collect { println(it) } } // 아무것도 출력되지 않음 컨버..
Flow는 비동기적으로 계산해야 할 값의 스트림을 나타낸다. Flow 인터페이스 자체는 떠다니는 원소들을 모으고 Flow의 끝에 도달할 때까지 각 값을 처리한다. Flow의 collect는 컬렉션의 forEach와 비슷하다. 이 함수는 Flow의 유일한 멤버 함수고 다른 함수들은 확장 함수로 정의돼 있다. iterator만 멤버 함수로 가진 Iterable 또는 Sequence와 비슷하다. 플로우와 값들을 나타내는 다른 방법들 비교 Flow 개념은 RxJava, Reactor를 쓴다면 잘 알겠지만 그 외의 사람들에겐 아니다. 여러 값을 리턴하는 함수가 필요하다고 가정한다. 한 번에 모든 값을 만들 때는 List, Set 같은 컬렉션을 쓴다. fun allUsers(): List = api.getAllUs..
채널은 값을 핫 스트림으로 갖지만 콜드 스트림이 필요할 때가 있다. 우리가 쓰는 대부분의 소스는 2종류로 구분할 수 있어서 핫 / 콜드 스트림 데이터 차이를 이해하는 게 소프트웨어 측면에서 유용하다. List, Set 등의 컬렉션은 핫이고 Sequence, 자바 스트림은 콜드다. 채널은 핫이지만 Flow, Observable, Single 같은 RxJava 스트림은 콜드다. 핫 vs 콜드 핫 데이터 스트림은 열정적이라 데이터 소비와 무관하게 원소를 생성하지만 콜드 데이터 스트림은 게을러서 요청이 있을 때만 작업하고 아무것도 하지 않는다. 핫인 리스트, 콜드인 시퀀스를 쓸 때 그 차이가 나온다. 핫 데이터 스트림의 빌더와 연산은 즉시 실행된다. 콜드 데이터 스트림에선 원소가 필요할 때까지 실행되지 않는다...