본문 바로가기
Book

[독서 기록] 모던 자바 인 액션 10장 람다를 이용한 도메인 전용 언어

by Renechoi 2023. 1. 10.

모던 자바 인 액션 10장 람다를 이용한 도메인 전용 언어 

 


 

Collections.sort(persons, comparing(Person::getAge).thenComparing(Person::getName));

 

나이 정렬 + 이름 알파벳 정렬 

 

- 332p 

 

 

한개의 메서드 호출 체인으로 거래 주문 정의하기 

 

Order order = forCustomer("BigBank")
		.buy(80)
        .stock("IBM")
        .on("NYSE")
        .at(125.00)
        .sell(50)
        .stock("GOOGLE")
        .on("NASDAQ")
        .at(375.00)
        .end();

 

 

 

메서드 체인 만들기 

 

public class MethodChainingOrderBuilder {
	public final Order order = new Order();
    
    private MethodChainingOrderBuilder(String customer) {
    	order.setCustomer(customer);
    }
    
    public static MethodChainingOrderBuilder forCustomer(String customer) {
    	return new MethodChainingOrderBuilder(customer);
    }
    
    public TradeBuilder buy(int quantity){
    	return new TradeBuilder(this, Trade.TYPE.BUY, quantity);
    }
    
    public TradeBuilder sell(int quantity){
    	return new TradeBuilder(this, Trade.TYPE.SELL, quantity);
    }
    
    public MethodChainingOrderBuilder addTrade(Trade trade) {
    	order.addTrade(trade);
        return this;
    }
    
    public Order end(){
    	return order;
    }
 }

 

public class TradeBuilder {
	private final MethodChainingOrderBuilder builder;
    public final Trade trade = new Trade();
    
    private TradeBuilder(MethodChainingOrderBuilder builder, Trade.Type type, int quantity) {
    	this.builder = builder;
        trade.setType(type);
        trade.setQuantity(quantity);
    }
    
    public StockBuilder stock(String symbol) {
    	return new StockBuilder(builder, trade, symbol);
    }
   
   }

 

public class StockBuilder { 
	private final MethodChainingOrderBuilder builder;
    private final Trade trade;
    private final Stock stock = new Stock();
    
    private StockBuilder(MethodChainingOrderBuilder builder, Trade trade, String symbol) {
    	this.builder = builder;
        this.trade = trade;
        stock.setSymbol(symbol);
   }

 

 

- 340 ~ 341p 

 

 

중첩 함수로 주식 거래 만들기 

Order order = order("BigBank", buy(90, stock("IBM", on("NYSE")), at(125.00)),

-343p 

 

 

람다를 이용한 시퀀싱 

 

Order order = forCustomer("BigBank", buy ( t-> t.quantity(80).stock("IBM") ));

- 348p 

 

 

DSL 구현, 프레임워크와 라이브러리를 통해 다양한 DSL 구현 가능 

 

반응형