Effective Kotlin 정리
·
Langauge/Kotlin
🧩 Item 27 : 변화로부터 코드를 보호하려면 추상화를 사용해라 상수리터럴은 아무것도 설명하지 않음.리터럴을 상수 프로퍼티로 변경하면의미있는 이름을 부여할 수 있고,값을 변경할 때 훨씬 유연함 함수함수는 추상화를 표현하는 수단함수 시그니처는 이 함수가 어 떤 추상화를 표현하고 있는지 알려줌매우 단순하지만 제한이 많음.무상태성 (상태를 유지하지 않음)함수 시그니처를 변경하면, 변경 지점이 많이 생김 클래스함수와 다른게상태를 가질 수 있으며,많은 함수를 가질 수 있음.final 클래스 외에는 다른 구현체가 절대 존재할 수 없음 인터페이스interface MessageDisplay { fun show( message: String, duration: MessageLengt..
4장. 부호화와 발전 (Encoding & Evolution)
·
Book/데이터 중심 애플리케이션 설계
❐ 0. Description데이터 부호화를 위한 다양한 형식을 살펴본다.스키마를 변경하고 "예전 버전"과 "새로운 버전의 데이터와 코드"가 공존하는 시스템을 어떻게 지원하는지 설명메시지 전달 시스템에서 다양한 데이터 부호화 형식이 데이터 저장과 통신에 어떻게 사용되는지 설명 ❐ 1. 데이터 부호화 형식(Formats of Encoding data)프로그램은 보통 두 가지 형태로 표현된 데이터를 사용해 동작 두 가지 표현 사이에 전환이 필요함부호화인메모리 표현 ➔ 바이트열"직렬화" or "마샬링"이라고도 함.복호화바이트열 ➔ 인메모리 표현"파싱" or "역직렬화" or "언마샬링" 이라고도 함. 🌀 1-1. 언어별 형식 (Language-Specific Formats)많은 프로그래밍 언어는 부호화 ..
3장. 저장소와 검색
·
Book/데이터 중심 애플리케이션 설계
❐ Description데이터베이스의 가장 기본적인 두 가지 동작데이터 저장데이터 제공이번장에서는데이터베이스가 데이터를 저장하는 방법과 데이터를 요청했을 때 다시 찾을 수 있는 방법에 대해 설명익숙한 데이터베이스 종류인 RDB와 NoSQL에 사용되는 저장소 엔진에 대해 집중적으로 설명로그 구조(log-structured) 계열 저장소(B-Tree) 엔진과 페이지 지향 계열 저장소 엔진도 살펴봄특정 작업부하 유형에서 좋은 성능을 내게끔 저장소 엔진을 조정하려면저장소 엔진이 내부엣버 수행되는 작업에 대해 대략적인 개념을 이해할 필요가 있음. ❐ 데이터베이스를 강력하게 만드는 데이터 구조🌀 데이터베이스를 강력하게 만드는 데이터 구조db_set () { echo "$1,$2" >> database}..
2장. 데이터 모델과 질의 언어
·
Book/데이터 중심 애플리케이션 설계
❐ Description데이터 모델의 중요성데이터 모델은 단순히 "데이터를 어떻게 저장할까?"의 문제가 아님.소프트웨어가 문제를 어떻게 생각하고 해결할 것인지에까지 영향을 줌여러 층위(Levels)에서의 데이터 모델데이터를 서로 다른 관점과 레벨에서 각자 다른 방식으로 모델링 함.각 계층은 명확한 데이터 모델을 제공해 하위 계층의 복잡성을 숨긴다.각 계층이 중요하게 생각할 부분은, 하위 계층의 관점에서 데이터를 표현하는 방법이번 장에서는데이터 저장과 질의를 위한 다양한 범용 데이터 모델을 살펴본다.특히 관계형, 문서형, 그래프 기반 데이터 모델을 비교한다. ❐ 관계형 모델과 문서 모델🌀 관계형 모델 오늘 날 흔히 씀데이터는SQL에서 테이블이라고 불리는 관계(Relation)로 구성되고,각 관계는 S..
1장. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션
·
Book/데이터 중심 애플리케이션 설계
❐ Description오늘날 많은 애플리케이션은 데이터 중심적(data-intensive)데이터 중심 애플리케이션 표준 구성 요소(standard building block)로 만듬데이터베이스캐시검색 색인 (Search Index)스트림 처리 (Stream processing)일괄 처리 (Batch processing)이 책은데이터 시스템의 원칙(principal)실용성(practicality)이를 활용한 데이터 중심 애플리케이션을 개발하는 방법을 담고 있음. ❐ 데이터 시스템에 대한 생각왜 데이터 시스템이라는 포괄적 용어로 묶어야 하나?경계의 모호성최근에 다양한 새로운 도구들이 등장. 이 도구들은 다양한 사용 사례(Use Case)에 최적화따라서, 전통적인 분류(=DB, 메시지큐, 캐시 등)로 딱..
인라인 함수 : 람다의 부가비용 없애기
·
Langauge/Kotlin
❐ 코틀린에서 람다 최적화어떻게?코틀린 컴파일러는 기본적으로 람다를 무명(익명) 클래스로 변환해 JVM 바이트코드를 생성한다.하지만, 람다를 사용할 때마다 새 클래스를 무조건 생성하지 않는다.동일한 구조의 non-capturing 람다는 하나의 클래스 인스턴스를 재사용하며,capturing 람다의 경우는 각각의 상태를 저장할 필요가 있으므로 별도의 클래스 인스턴스를 생성한다. non-capturing 람다 (변수를 포획하지 않는 경우)val greet = { println("Hello") }외부 변수를 참조하지 않는 상태 없는 람다컴파일 시 static final 싱글턴 객체로 생성됨JVM 바이트코드 상에서 여러 호출에도 동일한 인스턴스 재사용장점객체 할당 비용 없음메모리 효율적성능 최적화 가능 capt..
부록. SQL 분석 도구
·
Book/친절한 SQL 튜닝
보호되어 있는 글입니다.
7장. SQL 옵티마이저
·
Book/친절한 SQL 튜닝
보호되어 있는 글입니다.