<aside>
📖 <목차>
</aside>
모던 자바 인 액션 10장에서는 도메인 전용 언어(domain specific languages, DSL) 에 대해 소개하고 있다.
DSL 이 무엇인지 알아보고 람다를 이용하여 효과적인 자바 기반 DSL 을 구현하는 방법에 대해 알아본다.
개발팀과 도메인 전문가가 이해할 수 있는 코드는 생산성과 직결되기 때문에 코드는 읽기 쉽고 이해하기 쉬워야 한다. 도메인 전용 언어(DSL)는 특정 도메인을 대상으로 만들어진 프로그래밍 언어로 이 문제를 해결할 수 있다. (ex. 빌드 과정을 표현하는 dsl 인 메이븐, 앤트 등)
10.1 도메인 전용 언어
DSL(domain specific languages)은 범용 프로그래밍 언어가 아니라 특정 비즈니스 도메인의 문제를 해결하려고 만든 언어다.
특정 도메인에만 국한되므로 오직 자신의 문제를 어떻게 해결할지에만 집중할 수 있고 복잡성을 잘 다룰 수 있다.
- DSL을 개발하기 위해 필요한 점
- 의사 소통의 왕: 프로그래머가 아닌 사람도 이해할 수 있도록 코드의 의도가 명확히 전달되어야 함(코드가 비즈니스 요구사항에 부합하는지 확인 가능)
- 한 번 코드를 구현하지만 여러번 읽는다: 가독성은 유지보수의 핵심. 동료가 쉽게 이해할 수 있도록 코드 구현 필수
장점
- 간결함
- 비즈니스 로직을 간편하게 캡슐화하므로 반복을 피하고 코드를 간결하게 만들 수 있음
- 가독성
- 도메인 영역의 용어를 사용하므로 비 도메인 전문가도 쉽게 이해 가능
- 조직 구성원 간에 코드와 도메인 영역이 공유될 수 있음
- 유지보수
- 잘 설계된 DSL로 구현하면 쉽게 유지보수하고 변경 가능
- 높은 수준의 추상화
- DSL 은 도메인과 같은 추상화 수준에서 동작하므로 도메인의 문제와 직접적으로 관련되지 않은 세부 사항을 숨김
- 집중
- 도메인의 규칙을 표현할 목적으로 설계되었으므로 프로그래머가 특정 코드에 집중 가능 (생산성 향상)
- 관심사 분리
- 애플리케이션의 인프라구조와 관련된 문제와 독립적으로 비즈니스 관련된 코드에서 집중 가능 (유지보수 향상)
단점
- DLS 설계의 어려움
- 간결하게 제한적인 언어에 도메인 지식을 담기 어려움
- 개발 비용
- 코드에 DSL을 추가하는 작업은 초기 프로젝트에 많은 비용과 시간이 소모
- DSL 유지보수와 변경은 프로젝트에 부담