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