- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 학습지
- 일본어문법
- rxjava
- n3문법
- jlpt
- suspend
- 책추천
- coroutine
- 안드로이드
- errorhandling
- github
- 코틀린
- pullrequest
- androidstudio
- 책리뷰
- ai
- 진짜학습지
- Kotlin
- posting
- KotlinInAction
- 진짜학습지후기
- CustomTab
- 인공지능
- PR
- 진짜일본어
- 일본어기초
- Android
- GIT
- blog
- webflux
목록안드로이드/KOTLIN (20)
코딩하는 개굴이
장점멈추고 재개 가능메인 스레드에서 실행하면서 잠깐 중단도 가능중단되어도 스레드는 블로킹이 되지 않으며 뷰를 바꾸거나 다른 코루틴을 실행 가능데이터가 준비되면 코루틴은 메인 스레드에서 대기하다가 멈춘 지점에서 다시 작업을 수행비용이 매우 저렴하다 Sequence시퀀스 빌더는 중간에 yield 를 이용해 값을 돌려줄 수 있다반환만 가능하며, 중단 함수는 사용할 수 없다중단이 필요하다면 flow 를 사용하자val fibonacci: Sequence = sequence { var first = 0.toBigInteger() var second = 1.toBigInteger() while (true) { yield(first) val temp = first first += second second = t..
별 생각 없이 코드를 수정하다가 그냥 노란 워닝이 불편해서 자동으로 lint 플러그인 수정을 눌렀다가 큰코를 다친 적이 있었다. 이후로 왜인지 모르게 map 에서 remove 가 안되는 현상이 지속되어 오작동이 연쇄적으로 발생했는데, 그렇다. 본인은 아무 생각 없이 hashCode 를 오버라이드하는 실수를 저지른 것이다… 반성하는 의미로 equals 와 hashCode 에 대해 더 깊이 알아보려한다. 어디서 들어는 보았다. 자바에서 equals 를 재정의할 때 hashCode 도 재정의해야한다는 말이 있다. 자바에서 클래스는 Object 를 상속받기 때문에 Object Class 에 정의된 toString, hashCode, equals 메서드를 재정의할 수 있다. Kotlin 에서도 이와 마찬가지로, ..
해당 내용은 “코틀린 코루틴” 서적을 기반으로 작성되었습니다. Coroutine 의 중단은 어떻게 작동할까? 코루틴의 중심이 되는 기능이자 스레드 등과의 큰 차이점 중 하나가 잠시 멈추는, 중단에 있다는 것을 들어보았을 것이다. 마치 비디오 게임을 하다가 체크포인트나, 세이브를 하는 것처럼 중단 후 돌아올 수 있는 것이다. 이 부분에서 코루틴은 스레드와 크게 차이점을 가진다. 스레드는 저장이 불가하고 멈추는 것만 가능하나, 코루틴은 중단 시에 어떤 자원도 사용하지 않으면서 돌아올 때 다른 스레드에서 실행하는 것도, 중단되었을 때 반환하는 Continuation 객체의 직렬화/역직렬화까지 가능하기 때문이다. 그렇다면 도대체 어떤 점에서 다른지, 어떻게 중단과 재개는 동작하는지 한번 알아보도록 하자. 재개 ..
안드로이드 개발 시, 액티비티/프래그먼트 혹은 복잡한 클래스 간에 데이터들을 전달하기 위해서 Serializable 이나 Parcelable 을 사용하는 것을 본 적이 있을 것이다. 일반적으로 기본 타입들을 사용할 수도 있지만 점점 늘어나면서 전달해야하는 내용이 복잡해지기 때문에 그렇게 자주 사용되곤하는데, 평소 “둘 다 전달 방식이고 Serializable 은 성능이 떨어지더라.” 라는 간단하고 얕은 이해만 가지고 있었기에 오늘은 한번 정확하게 짚고 넘어가보고자한다. 직렬화란? 제대로 알기 위해서는 우선 우리는 직렬화가 무엇인지 완전히 이해해야한다. 자바의 직렬화는 자바의 시스템 내부(JVM의 힙/스택과 같은 메모리에 상주)에서 사용되는 객체나 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트..
Jetpack Compose 는 간단한 코드와 직관적인 API, 빠른 개발, 강력한 성능이라는 장점을 내세운 A ndroid 의 네이티브 UI 빌드 도구 키트이다. 근래에서는 Wear OS 또한 전용 Compose를 전면으로 내세우고 있기 때문에 Google 의 Compose 사랑이 어느정도인지 감이 잡힐 것이다. (아, 이건 각이구나) Airbnb, twitter, zoom, grab, dropbox 등 compose 통합을 이룬 앱들이 많아지고 있는 추세이다. 대체 어떤 것이기에 이렇게 좋다고 하는가? 한번 찍먹 해보도록 하자. (코드랩을 통한 찍먹 또한 가능하다. 5 과정을 거쳐 잘 구성되어있으니 살펴보아도 좋을 것 같다.) Compose 의 이해 지금까지 Android 의 뷰 계층 구조는 위젯 트..
해당 포스팅은 Fastcampus 의 실무 프로젝트로 배우는 Kotlin & Spring: 리팩토링부터 서비스 구현까지 강의를 기반으로 작성되었습니다. Coroutine 의 기초 동작을 파악해볼 수 있도록 runBlocking, launch, async, suspend, flow 등을 사용해 코드를 작성해 보았다. 실행해보며, 감을 잡아보도록 하자 :) import kotlinx.coroutines.* import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flow import kotlin.system.measureTimeMillis fun main() { // #####..
Dispatcher 란? 코루틴의 어떤 스레드에서 돌아갈지 정의하는 역할로써, Event Loop 를 통해 작동된다. Event Loop는 Call Stack 과 Callback Queue 의 상태를 반복적으로 체크하고, 함수를 실행할 시간이 되면 큐의 첫번째 아이템을 Call Stack 에 넣고 실행한다. 이렇게 반복하는데 이것을 tick 이라고 한다. Call Stack 이 구성되는 Dispatcher 는 아래 3가지가 있다. 각각 해당하는 스레드를 기준으로 콜스택을 구성하게 된다. Dispatchers.Main : UI를 구성하는 작업이 모여있는 쓰레드 풀 Dispatchers.IO : (파일 혹은 소켓을) 읽고 쓰는 작업이 모여있는 쓰레드 풀 Dispatchers.Default : 기본 쓰레드 풀..
Java 의 예외 처리 Java 의 경우에는 아래와 같이 try catch 로 특정 checked exception 을 걸어 처리하도록 필수하고 있다. public class JavaThrow { public void throwIOException() throws IOException { throw new IOException(); } } public static void main() { JavaThrow javaThrow = new JavaThrow(); try { javaThrow.throwIOException(); } catch (IOException e) { //checked Exception e.printStackTrace(); } } Kotlin 의 예외 처리, Java 의 Exception ..
Java/Kotlin 이 함께 사용되는 프로젝트의 경우 상호간의 클래스 사용에 주저한 적이 있을 것이다. 두 언어는 컴파일러가 큰 어려움 없이 사용할 수 있도록 해주지만, 아래와 같이 명확하게 개념을 짚어두고자 한다. 해당 내용은 fast campus 의 “실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지” 강의를 기반으로 작성되었음을 알립니다. Java 에서 Kotlin 클래스의 Getter, Setter 호출하기 아래와 같은 Student.kt 로 클래스를 둔다고 가정하자. class Student { var name: String? = null var id: Int? = null val age: Int = 10 var grade: String? = null //접근..
해당 내용은 fast campus 의 “실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지” 강의를 기반으로 작성되었음을 알립니다. 변수 탑레벨 즉, 파일 최상단에 변수를 위치할 수 있음 간단한 로직의 경우 굳이 클래스를 생성하지 않고 변수 할당만으로 처리 할 수 있음 var LOG_TAG = "LOG" fun main() { //... } 함수 //기본 fun sum(a: Int, b: Int): Int { return a + b } //표현식 스타일 fun sum(a: Int, b: Int): Int = a + b //표현식 & 반환타입 생략 fun sum(a: Int, b: Int) = a + b //몸통이 있는 함수는 반환타입을 제거하면 컴파일 오류 발생 /* fu..