<aside> 💡 ***이 장의 내용
도메인 전용 언어(DSL)란 무엇이며 어떤 형식으로 구성되는가? DSL을 API에 추가할 때의 장단점 JVM에서 활용할 수 있는 자바 기반 DSL을 깔끔하게 만드는 대안 최신 자바 인터페이스와 클래스에 적용된 DSL에서 배움 효과적인 자바 기반 DSL을 구현하는 패턴과 기법 이들 패턴을 자바 라이브러리와 도구에서 얼마나 흔히 사용하는가?***
</aside>
도메인 전용 언어(DSL)로 애플리케이션의 비즈니스 로직을 표현함으로, 버그와 오해를 미리 방지할 수 있다.
DSL은 작은, 범용이 아니라 특정 도메인을 대상으로 만들어진 특수 프로그래밍 언어이다.
ex) 저수준 코드
while (block != null) {
read(block, buffer)
for (every record in buffer) {
if (record.calorie < 400) {
System.out.println (record.name);
}
}
block = buffer.next();
}
위 코드에는 두 가지 문제가 있다!
자바의 스트림 API를 이용해 코드를 간단히 줄일 수 있다.
menu.stream()
.filter(d -> d.getCalories() < 400)
.map(Dish::getName)
.forEach(System.out::println)
플루언트 스타일
스트림 API의 특성인 메서드 체인을 자바의 루프의 복잡한 제어와 비교해 유창함을 의미
SELECT FROM
구문처럼 애플리케이션 수준의 기본값이 자바 메서드가 사용할 수 있도록 데이터베이스를 대표하는 한 개 이상의 클래스 형식으로 노출된다.내부 DSL에서는 적절하게 클래스와 메서드를 노출하는 과정이 필요하다.