Justin의 개발 로그
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..

자바 DSL - 중첩된 함수(NestedFunction) 패턴

public class NestedFunctionOrderBuilderEx { public static Order order(String customer, Trade... trades) { Order order = new Order(); order.setCustomer(customer); Stream.of(trades).forEach(order::addTrade); //주문에 모든 거래 추가 return order; } public static Trade buy(int quantity, Stock stock, double price) { return buildTrade(quantity, stock, price, Trade.Type.BUY); } public static Trade sell(int quan..

article thumbnail
자바 DSL - 메서드 체인 패턴

주식(stock)을 거래(trade)를 하는 주문(order) 기능을 Java로 구현 public class Order { private String customer; private List trades = new ArrayList(); public void addTrade(Trade trade) { trades.add(trade); } public String getCustomer() { return customer; } public void setCustomer(final String customer) { this.customer = customer; } public double getValue() { return trades.stream().mapToDouble(Trade::getValue).sum..

람다 - 팩토리 패턴

public class OriginalFactoryPattern { public static Product createProduct(String name) { switch(name) { case "Car" : return new Car(); case "Boat" : return new Boat(); default: throw new RuntimeException("No such product " + name); } } @Test void 팩토리메서드_테스트() { Product p1 = OriginalFactoryPattern.createProduct("Car"); Product p2 = OriginalFactoryPattern.createProduct("Boat"); } } public class La..

람다 - 의무체인 패턴

public class originalResponsibilityChain { public abstract class ProcessingObject { protected ProcessingObject nextProcessor; //자신과 동일한 객체를 멤버로 받음 abstract protected T handleWork(T input); //하위 객체 등록 public void setSuccessor(ProcessingObject successor) { this.nextProcessor = successor; } public T handle(T input) { T result = handleWork(input); if(nextProcessor != null) { return nextProcessor.han..

람다 - 옵저버 패턴

[AS-IS] import java.util.ArrayList; import java.util.List; public class OriginalObserverPattern { interface Observer { void notify(T message); } interface Subject { void registerObserver(Observer o); void notifyObservers(T message); } class WeatherFeed implements Subject { private final List observers = new ArrayList(); @Override public void registerObserver(Observer o) { this.observers.add(o); ..

람다로 효과적 프로그래밍 - 템플릿메서드 패턴

[AS-IS] 람다를 사용하지 않은 전통적(?)인 템플릿메서드 패턴 구조 추상클래스를 통해 공통 로직과 템플릿으로 분리할 추상 메서드를 나눈다. 상속받은 클래스에서 추상 메서드를 구현한다. public class OriginalTemplateMethodPattern { abstract class OnlineBanking { public void deposit(int amount) { // 입금 공통 로직은 여기에 있다. System.out.println("입금액: " + amount + "원"); bearInterest(amount); } // 인터넷 뱅킹 업체마다 선이자 계산 방식이 다른 경우 템플릿 메소드로 분리 abstract void bearInterest(int amount); } private..