반응형

전체 글 98

[이펙티브 코틀린] 8장. 효율적인 컬렉션 처리

아이템 49. 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라 p. 361 Q. 자바 8의 스트림을 사용하면 코틀린의 시퀀스와 마찬가지로 지연 처리되는가?  코틀린의 시퀀스와 자바 8의 스트림은 둘 다 지연 연산을 통해 요소를 처리한다는 점에서 비슷합니다.지연 연산을 사용하면 필요할 때마다 요소를 계산하며, 불필요한 계산이나 메모리 사용을 줄일 수 있습니다    p. 362  Think Twice Before Using Java 8 Parallel Streams - DZoneParallelization was the main driving force behind lambdas, stream API, and others. Let's take a look at why you should think ..

독서 2024.08.11

[이펙티브 코틀린] 7장. 비용 줄이기

아이템 45. 불필요한 객체 생성을 피하라 p. 311SoftReference  jvm, java --> java There are plenty of good and popular caching libraries on the JVM, including ehcache, guava and many others. However in some situations it’s worth exploring other options. Maybe you need better perf" data-og-host="www.michaelpollmeier.com" data-og-source-url="https://www.michaelpollmeier.com/2019/04/09/understanding-jvm-soft-referen..

독서 2024.08.04

[이펙티브 코틀린] 6장. 클래스 설계

아이템 36. 상속보다는 컴포지션을 사용하라 생략  아이템 37. 데이터 집합 표현에 data 한정자를 사용하라. 생략  아이템 38. 연산 또는 액션을 전달할 때는 인터페이스 대신 함수 타입을 사용하라 결론 : 자바 등에 제공하는 api가 아니라면 SAM(Single-Abstract Method), 즉 @FunctionalInterface 정의할 필요가 없다.   아이템 39. 태그 클래스보다는 클래스 계층을 사용하라 p. 266 태그 클래스와 상태 패턴의 차이  태그 클래스 태그 클래스는 객체의 상태나 동작을 구분하기 위해 사용되는 빈 클래스를 의미한다.주로 다형성을 이용하여 코드를 보다 명확하고 유지보수하기 쉽게 만드는 데 사용된다.태그 클래스 자체에는 데이터나 로직이 포함되지 않으며, 단순히 상태..

독서 2024.07.28

[이펙티브 코틀린] 5장. 객체 생성

아이템 33. 생성자 대신 팩토리 함수를 사용하라  p. 213예를 들어 코틀린 코루틴 라이브러리를 살펴보면, 거의 모든 코루틴 컨텍스트의 companion 객체가 컨텍스트를 구별할 목적으로 CoroutineContext.Key 인터페이스를 구현하고 있습니다.  코틀린 코루틴 라이브러리에서 코루틴 컨텍스트는 코루틴의 동작을 제어하는 데 중요한 역할을 합니다. 각 코루틴 컨텍스트 요소는 CoroutineContext 인터페이스를 구현하며, 각 요소는 키-값 쌍으로 저장됩니다. 여기서 CoroutineContext.Key 인터페이스가 중요한 역할을 합니다.  CoroutineContext와 Key CoroutineContext는 여러 컨텍스트 요소를 포함할 수 있는 인터페이스입니다. 각 요소는 키-값 쌍으로..

독서 2024.07.21

[이펙티브 코틀린] 4장. 추상화 설계

아이템 26. 함수 내부의 추상화 레벨을 통일하라  p. 160 추상화 레벨 통일 원칙 (Single Level of Abstraction, SLA) SLA 원칙 : 함수나 메소드가 동일한 수준의 추상화를 유지해야 한다는 원칙  SLA 원칙 위반 코드 예시fun processData() { val data = fetchDataFromApi() // 추상화된 단계 val results = data["results"] as List> // 추상화된 단계 val connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "user", "password") // 세부 사항 val statement = connecti..

독서 2024.07.15

[이펙티브 코틀린] 3장. 재사용성

아이템 19. knowledge를 반복하여 사용하지 말라 생략     아이템 20. 일반적인 알고리즘을 반복해서 구현하지 말라 p. 123 STDLIB 살펴보기https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/Module.md kotlin/libraries/stdlib/src/Module.md at master · JetBrains/kotlinThe Kotlin Programming Language. . Contribute to JetBrains/kotlin development by creating an account on GitHub.github.com      아이템 21. 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 ..

독서 2024.07.08

[이펙티브 코틀린] 2장. 가독성

아이템 11. 가독성을 목표로 설계하라 찾아본 내용 p. 73 let은 람다식의 결과를 리턴합니다. let 함수 문법 및 사용법let 함수는 확장 함수로, 모든 객체에서 호출할 수 있다let 함수는 객체를 람다의 인자로 전달하고, 그 람다 블록의 결과를 반환한다람다 식 내에서 객체를 참조하려면 기본적으로 it를 사용하거나 명시적으로 변수명을 지정할 수 있다 활용 예시null 안전성 확보특정 변수가 널이 아닐 때만 어떤 작업을 수행하려면 ?.let을 사용합니다.체이닝val result = "Kotlin".let { it.toUpperCase()}.let { it.reversed()}println(result) // "NITLOK"유형 변환 및 처리val number = "1234".toIntOrNul..

독서 2024.06.30

[이펙티브 코틀린] 1장. 안정성

아이템 1. 가변성을 제한하라 주요 내용 var, mutable 객체는 반드시 필요할 때만 사용하자. 코틀린에서 가변성을 제한하는 방법은 아래와 같다.읽기 전용 프로퍼티 val가변 컬렉션과 읽기 전용 컬렉션 구분하기데이터 클래스의 copy 찾아본 내용 p.16 plusAssign()과 plus()의 차이는?  plusAssign()은 동일한 mutable list 안에 원소를 삽입한다.따라서 레퍼런스 자체는 변경되지 않으므로 val 프로퍼티로 선언이 가능하다. plus()은 내부적으로 새로운 ArrayList 객체를 생성하여 반환한다.따라서 레퍼런스 자체가 변경되므로 var 프로퍼티로 선언해야한다. +++ 멀티스레드 환경에서는 동기화가 필요한 MutableList와는 달리 var List는 리스트 자체는..

독서 2024.06.23

[코틀린 인 액션] 11. DSL 만들기

1. 함수타입을 확장하면서 INVOKE()를 오버라이딩하는 예제 Kotlin Coroutines 코틀린 코루틴 라이브러리에서는 Continuation이라는 인터페이스가 있는데, 이 인터페이스는 비동기 작업의 결과를 처리하는 데 사용됩니다. Continuation 인터페이스는 resumeWith이라는 메서드를 가지고 있지만, 이를 invoke를 통해 간단하게 호출할 수 있습니다. interface Continuation { fun resumeWith(result: Result)}class PrintContinuation : Continuation { override fun resumeWith(result: Result) { println(result.getOrNull()) }}..

독서 2024.06.02

[코틀린 인 액션] 10장. 애너테이션과 리플렉션

찾아본 내용 1. 구체적인 프로퍼티에만 애너테이션 적용하기 아래와 같이 애너테이션을 사용하면 구체적인 프로퍼티에만 적용할 수 없다.// kotlinclass User { @SomeAnnotation var name = "ABC"}  아래와 같이 사용해야한다.// kotlinclass User { @property:A @get:B @set:C @field:D @setparam:E var name = "ABC"}  그러면 아래와 같이 컴파일된다.// Compiles to the analog of the following Java codepublic final class User { @D @NotNull private String name = "ABC..

독서 2024.05.26
반응형