전체 글

책/Effective Kotlin

[이펙티브 코틀린] 아이템 43: API의 필수적이지 않은 부분을 확장 함수로 추출하라

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. 확장 함수의 특징 1) *확장 함수는 import를 통해 사용할 수 있다 확장 함수는 멤버와 달리 별도의 import가 필요하다 이러한 이유로 대개 다른 패키지에 위치한다 직접 멤버를 추가할 수 없는 경우에 사용하기 유용하다 2) 멤버 함수보다 우선순위가 낮다 위에서 언급한 import해서 사용한다는 특징 때문에 같은 타입에 같은 이름으로 여러 개 만들 수 있다 같은 이름으로 다른 동작을 하는 확장 함수가 존재하는 것은 위험할 수 있다 이러한 위험 가능성이 있다면 확장 함수 대신 멤버 함수를 사용하는 것이 좋다 멤버 함수는 확장 함수보다 우선순위..

책/Effective Kotlin

[이펙티브 코틀린] 아이템 42: compareTo의 규약을 지켜라

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. compareTo의 동작원칙 비대칭적 동작: a >= b 이고, b >= a라면, a == b 연속적 동작: a >= b이고, b >= c라면, a >= c 코넥스적 동작: a >= b 또는 b >= a 중에 적어도 하나는 항상 true 2. compareTo의 대안 기본적으로 compareTo를 따로 정의해야 할 상황은 거의 없다. compareTo를 재정의하는 대신, 간단하게 다음의 함수를 이용해서 순서를 지정할 수 있다. sortedBy: 하나의 프로퍼티를 기반으로 순서를 지정할 때 사용 sortedWith: 하나의 프로퍼티를 기반으로 순서..

책/도메인 주도 설계 첫걸음

[도메인 주도 설계 첫걸음] Part 2. 전술적 설계

본문은 도메인 주도 설계 첫걸음을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 5장) 간단한 비즈니스 로직 분석 트랜잭션 스크립트 프로시저를 기반으로 시스템의 비즈니스 로직을 구성하는 패턴 입출력은 퍼블릭 인터페이스를 통하고 내부 구현은 프로시저로 구성된 스크립트 프로시저는 간단하고 쉬운 절차지향 스크립트(procedure script)로 구현 절차지향 스크립트? 작업을 순차적으로 수행하는 것을 의미(↔ 객체지향 언어) 내부적으로는 데이터베이스에 직접 접근한다 트랜잭션을 적용해 작업이 모두 성공하거나 실패함을 보장해야 한다 단순함이 최고의 장점 e.g. 원천 시스템의 데이터를 변환해서 목적 시스템에 전달 (단순 DTO Query를 생..

책/도메인 주도 설계 첫걸음

[도메인 주도 설계 첫걸음] Part 1. 비즈니스 도메인 분석하기

본문은 도메인 주도 설계 첫걸음을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1장) 비즈니스 도메인 분석 비즈니스 도메인 기업의 주요 활동 영역 기업은 여러 비즈니스 도메인을 운영할 수 있음 비즈니스 도메인은 자주 변경될 수 있음 (e.g. 노키아) 하위 도메인 하위 도메인 비즈니스 활동의 세분화된 영역 핵심, 일반, 지원의 세 가지 유형으로 구분 핵심 하위 도메인 회사가 경쟁업체와 다르게 수행하고 있는 것 (e.g. 구글의 검색 알고리즘) 핵심 하위 도메인은 복잡성이 높음 핵심 하위 도메인은 경쟁 우위의 원천이 됨 일반 하위 도메인 모든 회사가 같은 방식으로 수행하는 비즈니스 활동 지원 하위 도메인 회사의 비즈니스를 지원하는 활동..

etc

[TIP] 가독성 좋은 코드 작성하기: 함수 내부의 추상화 수준을 통일하라

1. 왜 추상화 레벨을 통일해야 하는가? 함수를 계층처럼 나누어서 사용하면 가독성이 높아진다 이러한 맥락에서 함수를 높은 레벨과 낮은 레벨로 구분해서 사용해야 한다는 원칙이 바로 추상화 레벨 통일(Single Level of Abstraction, SLA) 원칙이다 // Bad - 추상화 레벨 통일 이전 class CoffeeMachine { fun makeCoffe() { // 수백 개의 변수 선언 // 복잡한 로직 처리 // 낮은 수준의 최적화 } } // Better - 추상화 레벨 통일 이후 class CoffeeMachine { fun makeCoffe() { boilWater() brewCoffee() pourCoffee() pourMilk() } } 2. 추상화 레벨을 통일을 위한 규칙 객체..

코택
TaxFree