컴퓨터가 인식할 수 있는 코드는 바보라도 작성할 수 있지만, 인간이 이해할 수 있는 코드는 실력 있는 프로그래머만 작성할 수 있다.- 마틴 파울러(Martin Fowler), 코틀린은 간결성을 목표로 설계된 프로그래밍 언어가 아니라, 가독성(readability)을 좋게 하는 데 목표를 두고 설계된 프로그래밍 언어입니다.아이템 11 - 가독성을 목표로 설계하라개발자는 어떤 코드를 작성하는 것보다 읽는 데 많은 시간을 소모한다. 예를 들어, 오류가 발생했을 때 오류를 찾기 위해 코드를 작성할 때보다 오랜 시간 코드를 읽는 자신을 발견할 수 있다.가독성이란, 코드를 읽고 얼마나 빠르게 이해할 수 있는지를 의미합니다. 이는 우리의 뇌가 얼마나 많은 관용구(구조, 함수, 패턴)에 익숙해져 있는지에 따라 다릅니다..
kotlin
아이템 1 - 가변성을 제한하라- var보다는 val을 사용하고, mutable 프로퍼티보다는 immutable 프로퍼티를 사용하는 것이 좋습니다.- 변경이 필요할 경우에는, 처음부터 읽고 쓸 수 있는 요소를 사용하기 보단 data class의 copy를 활용하는 것이 좋습니다.- 변경 가능 지점은 최소화하여 불필요한 곳에서 변경이 일어나는 것을 막는 것이 좋습니다.코틀린에서 읽고 쓸 수 있는 프로퍼티(read-write property) var을 사용하거나, mutable 객체를 사용하면 상태를 가질 수 있습니다.요소가 상태를 갖게 되면, 해당 요소의 동작은 사용 방법 뿐 아니라 그 이력에도 의존하게 됩니다.상태를 갖는 요소는 시간의 변화에 따라 바뀌는 요소를 표현할 수는 있지만, 관리하기 어렵습니다...
목표코루틴 컨텍스트와 디스패처의 역할 및 중요성 학습다양한 디스패처(Main, IO, Default) 사용 시나리오 실습컨텍스트 전환과 예외 처리 방법 탐구CoroutineContextcoroutineContext는 코루틴을 실행하는 실행 환경을 설정하고 관리하는 인터페이스로, CoroutineContext 객체는 CoroutineDispatcher, CoroutineName, Job 등의 객체를 조합하여 코루틴의 실행 환경을 설정합니다. 따라서, CoroutineContext 객체는 코루틴 실행 및 관리의 핵심 역할을 합니다.CoroutineContext는 launch나 async 코루틴 빌더의 파라미터로 설정할 수 있으며, 해당 파라미터에 CoroutineContext를 명시적으로 지정하면 특정 스레..
목표launch와 async 빌더 사용법과 각각의 특징 설명Deferred 객체 사용법과 비동기 결과 처리 방법실제 네트워크 호출을 예로 들어 비동기 처리 실습코루틴 빌더 함수코루틴을 생성하는 데 사용하는 함수를 코루틴 빌더 함수라고 한다.코루틴 빌더 함수 종류- runBlocking- launch- asynclaunchlaunch는 코루틴을 추상화한 Job 객체를 반환하며, 이 Job 객체가 cancel되면 코루틴도 cancel됩니다.launch의 coroutineContext는 CoroutineScope를 통해 상속받고, 추가적인 context 요소를 넣을 수도 있습니다.만약, 동일한 key를 가진 context 요소가 이미 있었다면 해당 값을 덮어씌우는 형태로 동작합니다.위 이미지를 보면 확인할 수..
목표Kotlin 코루틴이 등장한 배경과 기본 개념 소개Launch와 suspend 함수를 사용한 간단한 예제를 통해 코루틴의 기본 실습JVM 프로세스와 스레드더보기프로그램이란?프로그램은 디스크에 저장된 파일의 내용(ex. 소스코드 파일)처럼 보조 메모리에 저장된 수동적 개체(passive entity)이다.실행되어야 할 몇 가지 명령들이 포함된 파일로, 실제로 수행하기 위해서는 메모리에 올려서 실행되어야 한다.프로세스란?프로세스(Job)은 CPU에 의해 실행될 수 있도록 컴퓨터 메모리에 로드된 프로그램 코드를 의미합니다.프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로도 볼 수 있습니다.프로세스가 동작하기 위해서는 메모리 주소, CPU, I/O와 같은 리소스가 필요합니다.프로세스는 수행되는 동안에만 존..
들어가기 전에 Java에서는 stream()을 통해 collection 요소를 하나씩 참조하여 반복적인 작업을 할 수 있습니다. Kotlin에는 Collections 자체에 filter(), map() 등의 API를 제공하고 있어 stream() 없이도 collection 요소에 하나씩 참조가 가능합니다. 위 내용만 보면, Java에서 collection에 stream() 붙여서 사용하는 경우와 Kotlin에서 collection의 API를 호출하는 경우 동일하게 연산이 이루어질 것 같지만 서로 상이하게 연산을 진행합니다. Java의 stream: Lazy Evaluation Kotlin의 collection 기본 연산(iterable): Eager Evaluation 이번 포스팅에서는 Kotlin의 c..
enum class enum 클래스는 미리 정의된 상수들로 이루어진 제한된 집합을 표현하는 클래스입니다. enum 클래스를 사용하면 정해진 상수들로 이뤄진 집합을 타입 안전(type-safe)하게 다룰 수 있습니다. 가장 단순한 형태는 아래와 같습니다. 빠뜨린 부분이 없는 when 식 enum 역시, 다른 타입과 유사하게 when을 사용해 변수 각각의 값을 비교할 수 있습니다. enum 사용 시 when 식에서 enum의 값이 될 수 있는 모든 enum 상수를 다룬다면, 따로 else를 작성하지 않아도 됩니다. 코틀린은 내부적으로 빠뜨린 부분이 없는 when 식에는 NoWhenBranchMatchedException 타입의 예외를 던지는 else가 암시적으로 추가됩니다. 빠뜨린 부분이 없는 when 식의..
삼항 연산자(ternary operator) JAVA에서는 조건문의 결과가 참인지 거짓인지에 따라 다른 로직을 수행할 때 삼항 연산자를 통해 코드를 간단하게 작성이 가능합니다. JAVA의 조건문 예시 // 일반적인 if문 public int maxNum(int a, int b) { if(a > b) return a; else return b; } // 삼항연산자를 사용한 if문 public int maxNum(int a, int b) { return a > b ? a : b; } JAVA와 달린 Kotlin은 삼항 연산자를 제공하지 않습니다. 그 이유는 Kotlin에서의 if문은 표현식(expression)으로, if문과 else문이 직접 값을 반환하기 때문입니다. 따라서, 삼항 연산자 없이 아래와 같이..