Justin의 개발 로그
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력해주세요.
보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력해주세요.
Mocks Aren't Stubs - Martin Fowler 02 Jan 2007

https://martinfowler.com/articles/mocksArentStubs.html Mocks Aren't Stubs Explaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing. martinfowler.com 요약 비교표 구분 Mockist Style (Mock을 활용하는 TDD) Classical Style (전통적인 TDD) 검증 대상 행동 검증 상태 검증 검증 방식 객체 간의 상호작용을 검증함. 객체의 최종 상태를 검증함. 초점 시스템 ..

article thumbnail
PROJECT REACTOR 소개

https://projectreactor.io/ 효율적인 반응형 시스템 만들기 리액티브 코어 완전 논-블로킹 함수형 인터페이스, CompletableFuture, Stream, Duration과 직접적인 상호작용 [Duration ???] 나 : Reactive Core 에서 duration이 어떤 특징인지 설명해 줘. GPT-4 : Reactive Core, 특히 Project Reactor에서 Duration의 사용은 반응형 프로그래밍에서 시간 기반의 연산을 수행할 때 핵심적인 역할을 합니다. Project Reactor는 비동기 데이터 스트림 처리를 위한 Java 라이브러리 중 하나로, Reactor Core는 이 라이브러리의 중심적인 부분입니다. Duration은 이러한 반응형 프로그래밍 패러다임..

Java로 DSL 개발 #2

[프로젝트 구성] 새 프로젝트 생성 IntelliJ -> File -> New Project Gradle, Java Name 셋팅 완료 plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' } test { useJUnitPlatform() } Gradle 업데이트 ./gradlew wrapper --gradle-version 8.1.1 작..

Java로 DSL(Domain Specific Language) 개발

DSL(Domain Specific Language) 개요 도메인 전용 언어 : 특정 비즈니스 도메인의 문제를 해결하려고 만든 언어 특정 비지니스의 문제를 어떻게 해결할지에만 집중 특정 비지니스의 복잡성을 더 잘 다룰 수 있다. 저수준 구현의 세부사항을 숨기고 사용자가 비지니스 문제에 집중할 수 있게 한다. DSL의 필요성 의사 소통 : 코드(Language)의 의도가 명확히 전달되어야 하며, 프로그래머가 아닌 사람도 이해할 수 있어야 한다. 가독성 : 한 번 코드를 구현하지만, 반복적으로 사용하며, 여러 번 코드를 읽는다. 즉, 코드의 가독성이 중요한 비즈니스 로직이다. DSL 장점 간결함 가독성 유지보수 높은 추상화 집중(생산성) : 비즈니스 도메인의 규칙을 표현할 목적으로 설계된 언어라서 프로그래머..

ThreadPool로 초당 API 호출 건수 제한 - ExecutorService

https://github.com/Justin-ad-Park/fastcampus-mysql/tree/init/project GitHub - Justin-ad-Park/fastcampus-mysql Contribute to Justin-ad-Park/fastcampus-mysql development by creating an account on GitHub. github.com [샘플 구동용 Gradle 설정] plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java' } group = 'com.example' version = '0.0..

article thumbnail
Flowable.crete 구조 파악

메인 코드 public class L11_FlowableSample2Simple { @Test void flowableTest() throws InterruptedException { // 1. 람다 메소드 방식 */ Flowable flowable = Flowable.create(stringFlowable, BackpressureStrategy.BUFFER); // 2. 인스턴스 생성 방식 */ // Flowable flowable = Flowable.create(new StringFlowable(), BackpressureStrategy.BUFFER); flowable.observeOn(Schedulers.computation()) .subscribe(new StringSubscriber()); Th..

article thumbnail
RxJava Single 구조 파해치기

Single을 활용한 간단한 샘플 소스를 가지고, Single이 어떻게 동작하는지 구조를 파해쳐 보도록 하겠다. 단계가 복잡하게 얽혀 전체를 파악하기 쉽지 않지만, 찬찬히 따라가다 보면 적어도 이렇게 구현되어 있구나라는 점은 파악할 수 있으리라. import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.core.SingleObserver; import io.reactivex.rxjava3.core.SingleOnSubscribe; import io.reactivex.rxjava3.disposables.Disposable; import org.jetbr..

자바 DSL - 중첩된 함수(NestedFunction) + Lambda

DSL이 파라미터의 위치에 따라 역할이 정해지는 중첩된 함수(Nested Function) 패턴으로 구현된 DSL의 단점은 Lambda(함수형인터페이스)를 활용해 개선할 수 있다. NestedFunction + Lambda를 활용한 파라미터 역할 지정 기본형 파라미터로 입력받던 quantity와 price를 대체하기 위한 Supplier를 정의 public class SimpleSupplier implements Supplier { final T value; protected SimpleSupplier(final T value) { this.value = value; } private SimpleSupplier() { value = null; } @Override public T get() { retur..