목표채널의 기념 개념과 사용법, 채널을 이용한 데이터 전송 이해셀렉트 표현식의 개념, 셀렉트를 이용한 비동기 작업 처리 이해채널채널은 송신자와 수신자의 수에 제한이 없으며, 채널을 통해 전송된 모든 값은 한 번만 받을 수 있습니다.채널은 누군가가 물품을 기부를 하면 아름다운 가게에 해당 물품이 전시되고, 그 물품은 여러 사람들 중 한 사람에게만 판매될 수 있다는 점에서 아름다운 가게와 비슷하다고 볼 수 있습니다.Channel은 아래와 같이 SendChannel와 ReceiveChannel를 구현한 인터페이스입니다. SendChannel: 원소를 보내거나 채널을 닫는 용도로 사용ReceiveChannel: 원소를 받을 때 사용SendChannel 인터페이스의 send 함수와 ReceiveChannel 인터..
kotlin
아이템 45 - 불필요한 객체 생성을 피하라객체 생성은 언제나 비용이 들어가며, 상황에 따라 큰 비용이 발생할 수 있으므로 불필요한 객체 생성을 피하는 것이 좋습니다. JVM의 객체 생성 최적화동일 문자열일 때, 기존 문자열 재사용JVM에서는 하나의 가상 머신에서 동일한 문자열을 처리하는 코드가 여러개가 있다면, 기존 문자열을 재사용합니다.Integer나 Long와 같은 박스화한 기본 자료형에 대해서도 작은 값에 대해서는 재사용Kotlin/JVM에서 Int나 Double은 자바에서와 다르게 원시 타입입니다. 박싱 타입일 때, 작은 값들에 대해서는 캐싱을 하여 해당 값이 필요할 때 매번 새로운 객체를 생성하지 않고 기존 객체를 활용할 수 있습니다. 언제 박싱 타입으로 동작할까?nullable하게 타입을 ..
클래스는 객체 지향 프로그래밍(OOP) 패러다임에서 가장 중요한 추상화입니다. 이번 장에서는 코틀린에서 자주 볼 수 있는 클래스 사용 패턴에 대해 알아보고자 합니다. 이런 패턴을 어떻게 활용하고, 어떤 점을 기대하고 사용하는 지 등 규약에 대해서 알아보겠습니다. 해당 규약들을 잘 따르면, 안전하고 깔끔한 코드를 만드는 데 도움이 됩니다.아이템 36 - 상속보다는 컴포지션을 사용하라상속은 굉장히 강력한 기능으로, IS-A 관계의 객체 계층 구조를 만들기 위해 사용됩니다. 상속은 관계가 명확하지 않을 때 사용하면, 여러 문제가 발생할 수 있으므로 신중하게 사용해야 합니다.일반적으로, 일부 코드 추출 또는 재사용이 목적이라면 상속보다는 컴포지션을 사용하는 것이 좋습니다.간단한 행위 재사용프로그레스 바를 특정 ..
목표코틀린 공식 문서의 Asynchronous Flow 학습Asynchronous Flow중단 함수는 비동기적으로 하나의 값을 반환합니다. 비동기적으로 계산된 여러 가지 값들을 반환하고 싶을 때는 어떻게 해야 할까요? 이를 위해 등장한 것이 Kotlin Flow입니다.여러 값들을 표현하는 방법코틀린에서는 collections을 이용해서 여러 값들을 표현할 수 있습니다.forEachcollections의 값들을 표현할 때에는 아래와 같이 간단하게 forEach를 사용할 수 있습니다.Sequence만약, CPU를 소비하는 로직을 포함한다면 sequence를 활용하기도 합니다. 아래 코드는 앞선 forEach와 결과는 동일하지만, CPU 연산처럼 동작하기 위해 100ms 대기하는 로직을 포함하여 프로그램 수..
추상화추상화(abstraction)는 프로그래밍 세계에서 중요한 개념 중 하나입니다. 컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다.즉, 추상화는 복잡성을 숨기기 위해 사용되는 단순한 형식을 의미하며, 대표적으로 사용되는 추상화로는 인터페이스가 있습니다.인터페이스는 클래스라는 복잡한 것에서 메서드와 프로퍼티만 추출해서 간단하게 만들었으므로 클래스의 추상화라고 할 수 있습니다.어떤 대상(객체)에 대한 추상화는 여러 가지가 나올 수 있습니다. 위 사진들은 집을 추상화한 예시 두가지이며, 중점을 두는 대상이 다릅니다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지를 결정해야 합니다.프로그래밍에서의 ..
목표멀티스레드 환경에서 코루틴을 활용한 성능 최적화 방법고성능 비동기 프로그래밍을 위한 코루틴 조정 전략성능 측정 및 분석을 통한 최적화 실습일시 중단 함수일시 중단 함수는 코루틴이 아니다일시 중단 함수는 코루틴이 아닌, 일시 중단 지점을 포함할 수 있는 코드의 집합이다.일시 중단 함수는, suspend fun 키워드로 선언된 함수로 함수 내에 일시 중단 지점을 포함할 수 있는 함수입니다. 일시 중단 함수는 일반 함수와 마찬가지로 복잡한 코드들을 구조화하고 재사용할 수 있는 코드의 집합으로 만드는 데 사용됩니다. 일시 중단 함수는 코루틴 내부에서 실행되는 코드의 집합일 뿐, 코루틴이 아닙니다.위 코드를 수행하면, 일시 중단 함수가 순차적으로 호출하여 2초 이상 걸린 것을 확인할 수 있습니다.위 코드에서 ..
System.out.print를 매 프로젝트마다 각각 구현해야 한다면 피곤한 일이 될 것이다.누군가가 한 번 만들어 놓고, 필요할 때 이를 활용할 수 있게 만든 것이 프로그래밍 언어의 핵심 특징 중 하나인 재사용성이다.재사용성은 큰 힘이 있는 만큼 잘 생각하고 사용해야 한다.아이템 19 - knowldeg를 반복하여 사용하지 말라여러 요소에 비슷한 부분이 있는 경우, 변경이 필요할 때 실수가 발생할 수 있습니다. 이런 부분은 추출하는 것이 좋습니다.다만, Don't Repeat Yourself라는 문장을 엄격하게 지키려고 해서, 비슷해보이는 코드를 모두 추출하려고 해서는 안됩니다.극단적인 것은 언제나 좋지 않으며, 항상 균형이 중요합니다.실용주의 프로그래머 책에서는 Don't Repeat Yourself..
목표코루틴 스코프(GlobalScope, coroutineScope, supervisorScope)의 사용법 및 차이점 파악구조화된 동시성에 대한 심도 깊은 이해와 예제 실습코루틴을 활용한 패턴과 모범 사례 공유구조화된 동시성구조화된 동시성(Structured Concurrency)의 원칙이란, 비동기 작업을 구조화함으로써 비동기 프로그래밍을 보다 안정적이고 예측할 수 있게 만드는 원칙입니다.코루틴에서는 구조화된 동시성의 원칙을 사용해 비동기 작업인 코루틴을 부모-자식 관계로 구조화하여 보다 안전하게 관리될 수 있도록 합니다.코루틴을 부모-자식 관계로 만드는 방법은 아래 예시처럼, 부모 코루틴을 만드는 코루틴 빌더의 람다식 내에 새로운 코루틴 빌더를 호출하면 됩니다. 구조화된 코루틴 특징구조화된 코루틴의..