반응형

스터디 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

[데이터 중심 애플리케이션 설계] 6장

핵심 내용 1. 주요 파티셔닝 기법 키 범위 파티셔닝 : 키가 정렬돼 있고 개별 파티션은 어떤 최솟값과 최댓값 사이에 속하는 모든 키를 담당한다. 키가 정렬돼 있어 범위 질의가 효율적이지만, 애플리케이션에서 정렬 순서가 서로 가까운 키에 자주 접근하면 핫스팟이 생길 위험이 있다. 이 방법에서는 보통 한 파티션이 너무 커지면 키 범위를 두 개로 쪼개 동적으로 재균형화를 실행한다. 해시 파티셔닝 : 각 키에 해시 함수를 적용하고 개별 파티션은 특정 범위의 해시값을 담당한다. 이 방법을 쓰면 키 순서가 보장되지 않아 범위 질의가 비효율적이지만 부하를 더욱 균일하게 분산할 수 있다. 해시 파티셔닝을 사용할 때는 보통 고정된 개수의 파티션을 미리 만들어 각 노드에 몇 개씩의 파티션을 할당하며 노드가 추가되거나 제..

독서 2023.11.17

[데이터 중심 애플리케이션 설계] 5장

핵심 내용 1. 복제의 용도 고가용성 연결이 끊긴 작업 : 네트워크 중단이 있어도 애플리케이션이 계속 동작 지연 시간 확장성 2. 복제에 대한 주요 접근 방식 단일 리더 복제 : 클라이언트는 모든 쓰기를 단일 노드로 전송하고 리더는 데이터 변경 이벤트 스트림을 다른 복제 서버로 전송한다. 읽기는 모든 복제 서버가 수행할 수 있지만 팔로워의 읽기는 오래된 값일 수 있다 다중 리더 복제 : 클라이언트는 각 쓰기를 여러 리더 노드 중 쓰기를 받아들일 수 있는 노드로 전송한다. 리더는 데이터 변경 이벤트 스트림을 다른 리더와 모든 팔로워 노드로 전송한다 리더 없는 복제 : 클라이언트는 각 쓰기를 여러 노드로 전송한다. 클라이언트는 오래된 데이터를 감지하고 이를 바로잡기 위해 병렬로 여러 노드에서 읽는다 3. 복..

독서 2023.11.17

[데이터 중심 애플리케이션 설계] 4장

핵심 내용 1. 순회식 업그레이드는 정지 시간 없이 새로운 버전의 서비스를 출시 가능하게 하고 배포를 덜 위험하게 만든다. 2. 순회식 업그레이드 중이거나 여러 가지 다른 이유로 다양한 노드에서 다른 버전의 여러 애플리케이션 코드가 수행된다. 따라서 시스템을 흐르는 모든 데이터는 하위 호환성과 상위 호환성을 제공하는 방식으로 부호화해야 한다. 3. 다양한 데이터 부호화 형식으로는 JSON, XML, CSV 같은 텍스트 형식과 스리프트, 프로토콜 버퍼, 아브로 같은 이진 스키마 기반 형식이 존재한다. 배운 내용 1. 프로토콜 버퍼와 같은 구조화된 데이터 직렬화 방식에서 필드에 새로운 태그 번호를 부여하는 방식으로 스키마에 새로운 필드를 추가할 수 있다. 새로 추가되는 필드는 상위 호환성을 유지하려면 opt..

독서 2023.11.15
반응형