모던 자바 인 액션 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 구현 가능
반응형
'Book' 카테고리의 다른 글
[독서 기록] 모던 자바 인 액션 12장, 새로운 날짜와 시간 api (0) | 2023.01.11 |
---|---|
[독서 기록] 모던 자바 인 액션 11장 null 대신 Optional 클래스 (0) | 2023.01.11 |
[독서 기록] 모던 자바 인 액션 9장 리팩터링, 테스팅, 디버깅 (0) | 2023.01.10 |
[독서 기록] 모던 자바 인 액션 8장 컬렉션 API 개선 (0) | 2023.01.09 |
[독서 기록] 모던 자바 인 액션 7장 병렬 데이터 처리와 성능 (0) | 2023.01.09 |