목록전체 글 (82)
고딩왕 코범석
Index 코틀린의 이모저모 Type Alias와 as import 구조분해와 componentN 함수 Jump와 Label TakeIf와 TakeUnless scope function scope function이란? scope function의 분류 scope function의 적절한 용례 scope function과 가독성 코틀린의 이모저모 Type Alias와 as import typealias는 긴 이름의 클래스 혹은 함수 타입이 있을 때 축약하거나 더 좋은 이름을 쓰고싶을 경우 사용한다. typealias FruitFilter = (Fruit) -> Boolean fun filterFruits(fruits: List, filter: FruitFilter) {...} data class Ultra..
Index 시스템 간 강결합 문제 이벤트 개요 이벤트 관련 구성요소 이벤트의 구성 이벤트 용도 이벤트 장점 이벤트, 핸들러, 디스패처 구현 이벤트 클래스 Events 클래스와 ApplicationEventPublisher 이벤트 발생과 이벤트 핸들러 흐름 정리 동기 이벤트 처리 문제 비동기 이벤트 처리 로컬 핸들러 비동기 실행 메시징 시스템을 이용한 비동기 구현 이벤트 저장소를 이용한 비동기 처리 이벤트 적용 시 추가 고려 사항 이벤트 처리와 DB 트랜잭션 고려 시스템 간 강결합 문제 쇼핑몰에서 환불 로직을 구현한다 가정할 때, 다음과 같은 방법이 있다. 도메인 객체에서 환불 기능을 제공하는 도메인 서비스를 파라미터로 받아 도메인의 상태를 변경 후 도메인 서비스를 실행 응용 서비스 자체에서 환불 기능 실..
Index 코틀린에서 배열과 컬렉션을 다루는 방법 배열 코틀린에서의 Collection - List, Set, Map 컬렉션의 null 가능성, 자바와 함께 사용하기 코틀린에서 다양한 함수를 다루는 방법 확장함수 infix 함수 inline 함수 지역함수 코틀린에서 람다를 다루는 방법 코틀린에서의 람다 Closure try with resource 코틀린에서 컬렉션을 함수형으로 다루는 방법 다양한 컬렉션 처리 기능 List를 Map으로 중첩된 컬렉션 처리 코틀린에서 배열과 컬렉션을 다루는 방법 배열 잘 사용하지 않는다. val arr = arrayOf(100, 200) val plusArr = arr.plus(300) for ((i, value) in plusArr.withIndex()) { printl..
Index 코틀린에서 클래스를 다루는 방법 클래스와 프로퍼티 생성자와 init 커스텀 getter, setter backing field 코틀린에서 상속을 다루는 방법 추상 클래스 인터페이스 클래스를 상속할 때 주의할 점 상속 관련 지시어 정리 코틀린에서 접근 제어를 다루는 방법 자바와 코틀린의 가시성 제어 코틀린 파일의 접근 제어 다양한 구성요소의 접근 제어 자바와 코틀린을 함께 사용할 경우 주의할 점 코틀린에서 object 키워드를 다루는 방법 static 함수와 변수 싱글톤 익명 클래스 코틀린에서 중첩 클래스를 다루는 방법 중첩 클래스의 종류 코틀린의 중첩 클래스와 내부 클래스 코틀린에서 다양한 클래스를 다루는 방법 Data class Enum class Sealed Class, Sealed Int..
Index 코틀린에서 제어문을 다루는 방법 if문 Expression과 Statement switch와 when 코틀린에서 반복문을 다루는 방법 for-each문 for문 Progression과 Range while문 코틀린에서 예외를 다루는 방법 try catch finally Checked Exception과 Unckecked Exception try with resource 코틀린에서 함수를 다루는 방법 함수 선언 문법 default Parameter named Argument 같은 타입의 여러 파라미터 받기 (가변인자) 코틀린에서 제어문을 다루는 방법 if문 fun validateScoreIsNotNegative(score: Int) { if (score < 0) { throw IllegalArg..
Index 변수 다루기 변수 선언 키워드 - var, val 차이점 Kotlin에서의 Primitive Type Kotlin에서의 nullable 변수 Kotlin에서의 객체 인스턴스화 null 다루기 Kotlin에서의 null 체크 Safe Call과 Elvis 연산자 널 아님 단언!! 플랫폼 타입 Type 다루기 기본 타입 타입 캐스팅 Kotlin의 3가지 특이한 타입 String Interpolation, String indexing 연산자 다루기 단항 연산자 / 산술 연산자 비교 연산자와 동등성, 동일성 논리 연산자 / 코틀린에 있는 특이한 연산자 연산자 오버로딩 변수 다루기 변수 선언 키워드 - var, val 차이점 Java에서의 int와 final int의 차이 = 가변이냐? 불변이냐? va..
Index 도메인 모델과 경계 바운디드 컨텍스트 바운디드 컨텍스트 구현 바운디드 컨텍스트 간 통합 바운디드 컨텍스트 간 관계 도메인 모델과 경계 한 개의 모델로 여러 하위 도메인을 모두 표현하려 시도하면 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 예를 들어, 카탈로그에서의 상품과 재고 관리에서의 상품, 주문 상품, 배송에서의 상품들은 모두 같은 상품이지만 실제 의미하는 것이 다르다. 카탈로그에서의 상품은 상품 제목, 내용과 같은 정보를 의미하고 재고 관리에서의 상품은 상품 갯수가 주된 정보이다. 여러 하위 도메인의 모델이 얽히기 시작하면 하위 도메인 별로 다르게 발전하는 요구사항을 모델에 반영하기 어려워진다. 이러한 이유로 한 개의 모델로 모든 하위 모델을 표현하려는 시도는 좋지 않다. 모델은 ..
Index 애그리거트와 트랜잭션 선점 잠금 선점 잠금과 교착상태 비선점 잠금 강제 버전 증가 오프라인 선점 잠금 오프라인 선점 잠금을 위한 LockManager 인터페이스와 관련 클래스 DB를 이용한 LockManager 구현 애그리거트와 트랜잭션 개념적으로 같은 애그리거트지만 물리적으로 다른 애그리거트 객체를 사용할 때 데이터의 일관성이 깨질 수 있다. 예를 들어 운영자가 상품을 배송 상태로 변경하는 요청, 고객의 배송지 요청이 동시 접근했을 때를 가정해본다. 운영자가 배송 상태를 변경할 때 고객의 배송지 변경 기능을 막아야 일관성이 지켜진다. 일관성이 깨지지 않도록 둘 중 하나의 방법을 선택해야한다. 운영자가 배송지 정보를 조회하고 상태를 변경하는 동안, 고객이 애그리거트를 수정하지 못하게 막는다. ..