반응형

독서 41

[이펙티브 코틀린] 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

[코틀린 인 액션] 9장. 제네릭스

찾아본 내용 1. 하위 타입에 대한 두가지 규칙 1. 하위 타입은 상위 타입이 선언하는 것과 최소한 동일한 범위의 타입을 수용해야한다. (in) 2. 하위 타입은 상위 타입이 선언하는 것과 최대한 동일한 범위의 타입을 반환해야한다. (out) 2. 공변성 1. 하위 타입(Dog)은 상위 타입(Animal)보다 구체적이므로 최소한 동일한 범위의 타입을 수용할 수 없다. 2. 하위 타입(Dog)은 상위 타입(Animal)보다 구체적이므로 최대한 동일한 범위의 타입을 반환할 수 있다. 따라서 하위 타입에 대해 공변성을 만족하려면 out 에 대해서만 정의 가능 3. 반공변성 1. 하위 타입(Animal)은 상위 타입(Dog)보다 추상적이므로 최소한 동일한 범위의 타입을 수용할 수 있다. 2. 하위 타입(Anim..

독서 2024.05.19

[코틀린 인 액션] 8장. 고차 함수: 파라미터와 반환 값으로 람다 사용

배운 내용 1. p.358 읽으면서 인터페이스-구현체로 문제를 해결할 수도 있지 않은가? 라는 생각을 했었는데, 363쪽에 노트에서 이에 대한 내용이 있었다. 간단한 로직의 경우에는 if else 구문으로 사용해도 좋을 듯하다.  찾아본 내용 1. When to Use Sequences When to Use SequencesWhen should you use Kotlin sequences? And when should you use normal collections? In this article, we'll look at some of the characteristics that can have the biggest impact on performance.typealias.com operation cou..

독서 2024.05.13
반응형