본문 바로가기

Study OR Book/Book12

[코틀린 코루틴] 2장 시퀀스 빌더 파이썬이나 자바스크립트 같은 언어에서는 아래와 같이 제한된 형태의 코루틴을 사용하고 있다.1) 비동기 함수 (async/await)2) 제너레이터 함수 (값을 순차적으로 반환) 코틀린에서는 제너레이터 대신 시퀀스를 생성할 때 사용하는 시퀀스 빌더를 제공한다.코틀린의 시퀀스는 List나 Set 같은 컬렉션과 비슷한 개념인데, 필요할 때마다 값을 하나씩 계산하는 지연 처리를 한다. 시퀀스의 특징- 요구되는 연산을 최소한으로 수행- 무한정이 될 수 있음- 메모리 사용이 효율적 -> Q: 무한정. 메모리 효율? 시퀀스는 sequence라는 함수를 이용해 정의된다.시퀀스의 람다 표현식 내부에서는 yield 함수를 호출하여 다음 값을 생겅한다.val seq = sequence { yield(1) yield.. 2025. 5. 20.
[코틀린 코루틴] 1장 코틀린 코루틴을 배워야 하는 이유 코틀린 코루틴을 배워야 하는 이유- 이미 RxJava나 Refactor와 같은 JVM 계열 라이브러리가 있음- 비동기적 연산을 수행하기 위한 다양한 방법이 존재- 그럼에도 불구하고 코틀린 코루틴을 배워야하는 이유는 무엇일까 1963년 처음 제시되었으나 코루틴이라는 개념이 실제 현업에서 사용될 수 있도록 구현되기까지 수십 년 걸렸다. 멀티플랫폼에서 작동시킬 수 있고, 코틀린을 사용하는 모든 플랫폼을 넘나들며 사용할 수 있다.코틀린 코루틴을 도입한다고 해서 기존 코드를 크게 수정할 필요 없다.초보 개발자들이 사용하는 데도 무리가 없다. 이러한 이유로 코틀린 코루틴을 배워야한다. 코루틴 사용스레드 전환- 안드로이드에서의 문제: 하나의 앱에서 뷰를 다루는 스레드가 하나만 존재하고, 이 스레드는 가장 중요한 스.. 2025. 5. 20.
[실전 레디스] Chaprter 01_레디스의 시작 들어가기에 앞서 PART 01은 기초적인 내용을 담고 있으며, 아래와 같은 순서로 정리되어 있다.1장 레디스의 시작2장 자료형과 기능3장 고급 기능4장 레디스를 활용한 애플리케이션 작성 그 중 1장 CHAPTER 01 레디스의 시작에 대해 읽은 내용을 정리해 보려고 한다.Redis: 빠른 속도와 다양한 자료형을 제공하는 비관계형 데이터베이스 레디스를 한 줄로 정리해 보자면, 위와 같다. Chapter1의 전반적인 내용도 사실 위 한 줄을 넓은 범위로 풀어냈다고 느껴진다.그 다음으로 이어지는 문장은 아래와 같은데, 어떻게 빠르게 동작할 수 있는지에 대한 내용이 더해졌다.레디스는 인메모리 데이터 구조 저장소로써 인메모리에서 빠르게 동작하고, 자료형과 기능이 다양한 비관계형 데이터베이스 입니다. 1. 레디스.. 2025. 5. 20.
[이펙티브 코틀린] 아이템46: 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라 1. 고차 함수다른 함수를 인자로 받거나 함수를 반환하는 함수코틀린에서 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있음 2. 고차 함수와 inline 의 필요성코틀린에서는 람다 표현식이 객체로 변환되므로 성능 및 메모리 측면에서 오버헤드 발생할 수 있음이를 최적화하기 위해 inline 키워드를 사용하면 성능이 향상 3. 인라인 함수 (inline)컴파일 시점에 함수의 호출 코드가 해당 위치로 직접 복사되는 함수이를 통해 함수 호출 오버헤드를 줄이고, 람다 객체 생성을 방지하여 성능을 최적화 할 수 있음 noInlineTest는 객체를 생성inlineTest는 객체를 생성하지 않고 코드가 직접 삽입되어 실행 속도가 훨씬 빠름 4. reified 키워드기본적으로 JVM의 제네릭은 타입 소거(Type.. 2025. 2. 20.
[이펙티브 코틀린] 아이템43: API의 필수적이지 않는 부분을 확장 함수로 추출하라 클래스의 메서드를 정의 할 때, 메서드를 아래 중 어떤 것으로 정의할 것인지 결정해야 한다.멤버로 정의할 것인가?확장 함수로 정의할 것인가? 1) 멤버 함수 (Member Function)클래스 내부에서 직접 정의된 메서드해당 클래스에 종속됨클래스 인스턴스를 통해 호출됨class Workshop(/*...*/) { // ... fun makeEvent(data: DateTime): Event = // ... val permalink get() = "/workshop/$name"} 2) 확장 함수 (Extension Function)기존 클래스의 기능을 확장하는 함수클래스 외부에서 정의됨클래스 내부 멤버처럼 사용할 수 있지만, 실제로는 첫 번째 매개변수로 리시버 객체를 받는.. 2025. 2. 18.
[이펙티브 코틀린] 아이템40: equals의 규약을 지켜라 코틀린의 Any에는 다음과 같이 잘 설정된 규약들을 가진 메서드들이 있다.equalshashCodetoString'아이템 32: 추상화 규약을 지켜라' 에서 자깐 hashCode와 equals가 언급되었다.이번엔 지난번에 언급된 equals에 대하여 더 깊이 그리고 많이 언급하고 있다. 동등성코틀린에는 두 가지 종류의 동등성이 있다. 1) 구조적 동등성equals 메서드와 이를 기반으로 만들어진 == 또는 != 연산자로 확인하는 동등성이다.a가 nullable이 아니라면 a == b a.equals(b)로 변환되고, a가 nullable이라면 a?.equals(b) ?: (b === null)로 변환된다. 2) 레퍼런스적 동등성=== 또는 !== 연산자로 확인하는 동등성이다.두 피연산자가 같은 객체를 가.. 2025. 2. 10.