657
도메인 특화 언어
domain
specific
language
(
DSL
)대상 분야의 전문가들이 사용하는 용어, 상용구,
표현을 닮은 프로그래밍 언어다.
DSL
작성한 프로그램은 대상 분야의 내용을 구조화한
서처럼 읽을 수 있다. 이상적인 경우, 프로그래밍에 대해 잘 알지 못하는 해당 분야의 전문가가
DSL
을 사용해서 코드를 작성하는 것이 불가능한 경우에도 코드를 읽고, 이해하고, 검증할 수
있다.
이 분야는 광범위하기 때문에
DSL
과 스칼라의
DSL
지원에 대해 간단하게 다룰 수밖에 없다.
깊게 다룬 것을 원한다면 부록
A
DSL
관련 참고 문헌을 살펴보라.
만들어진
DSL
가지 이점을 제공한다.
캡슐화
DSL
자세한 구현을 감추고, 해당 분야와 관계있는 추상적인 부분만 노출시킨다.
생산성
DSL
은 캡슐화로 구현이 감춰져 있기 때문에 애플리케이션의 여러 특징을 작성하고 변경하
드는 노력을 최적화할 있다.
의사소통
DSL
은 개발자가 해당 분야를 이해하고, 해당 분야의 전문가가 구현이 요구 사항을 만족하
는지 검증하는 도움을 준다.
스칼라 도메인 특화 언어
CHAPTER
20
658
4
고급 주제 및 실전 응용
하지만
DSL
에는 가지 단점도 있다.
DSL
만들기 어렵다
DSL
성하지다. 하지만 그를 위한 노력을 과소평가해서는 된다. 첫째,
DSL
구현하는 기술은 단순하지 않다 (잠시 후에 다룰 예제를 보라 ). 둘째, 좋은
DSL
전통적
API
보다 설계하기 어렵다.
API
설계 시 구현 언어의 구문을 닮으려는 경향이 있으며,
언어와의 균일성이 중요하고, 균일하게 만들기도 쉽다. 반면 각각의
DSL
별개의 고유한
어이기 때문에, 대상 분야의 독특한 기능을 반영하는 구문을 만들 있다. 이렇게 자유도가
크기 때문에 가장 나은 추상화를 찾기 힘들다.
DSL
유지보수하기 어렵다
구현 단순하지 않은 기법을 활용하기 때문에,
DSL
해당 분야의 변화에 맞춰서 오랜
간에 걸쳐 유지보수할 필요가 있다. 사용자 경험을 낫게 하기 위해 구현의 단순성을 포기
하는 경우도 자주 있다.
하지만 설계한
DSL
은, 자주 사용할 경우 유연하고 튼튼한 애플리케이션을 작성하기 위한
력한 도구가 있다.
구현하는 관점에서 본다면
DSL
내부적
internal
것과 외부적
external
것으로 나눌 있다.
내부(내장 )
DSL
은 스칼라와 같은 범용 프로그래밍 언어에서 코드를 관용구처럼 사용해서 작
성하는 방식이다. 특별한 목적의 구문분석기가 필요치 않다. 반면 외부
DSL
자체 문법과
문분석기를 사용하는 별도의 전용 언어다.
특별한 목적의 구문분석기가 필요없기 때문에 내부
DSL
만들기 쉽다. 반면 기저에 있는
어의 제약 사항이 대상 분야의 개념을 표현하기 위한 선택 사항을 제약할 있다. 외부
DSL
에는
이런 제약이 없다. 여러분이 신뢰할 있는 구문분석기를 만들 있는 원하는 대로 언어를
계할 있다. 전용 구문분석기를 사용하는 것은 어려울 있다. 사용자에게 도움이 되는 좋은
오류 메시지를 표시하는 것은 구문분석기를 작성하는 사람들에게 언제나 도전적인 일이었다.

Get 프로그래밍 스칼라: 실용적인 스칼라 활용법을 익히는 가장 확실한 실전 바이블 (2.11.x 버전 기반) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.