143
3
기초를 튼튼히
3.4
도메인 특화 언어
도메인 특화 언어
domain
specific
language
,
DSL
특정 문제 영역을 위해 만들어진 언어로,
당 영역의 개념을 간결하고 직관적으로 표현할 수 있게 돕는 것이 목적이다. 예를 들어
SQL
DSL
로 간주할 수 있다.
SQL
은 관계형 모델
Relational
Model
의 해석을 표현하기 위한 프로그래밍
언어이기 때문이다.
하지만
DSL
이라는 용어는 보통 호스트 언어에 내장
embedded
하거나, 전용 구문분석기를 사용해
임의로 만든 언어에만 국한해서 사용하고는 한다. 여기서 내장이라는 용어는
DSL
표현
하기 위해 호스트 언어에서 미리 정해진 관용구적 관습을 사용해서 코드를 작성한다는 뜻이다.
내장
DSL
전용 구문분석기를 활용하는 외부
DSL
구분해 내부
DSL
이라고도 부른다.
내부
DSL
사용하면 개발자가 호스트 언어의 기능을 전적으로 활용해서
DSL
처리하지
못하는 기능도 처리할 있다 (이를 부정적인 관점에서 본다면,
DSL
빠진 추상화존재할
수 있다는 의미다 ). 또한 내부
DSL
를 사용하면 새로운 언어를 위한 어휘분석기, 구문분석기,
그리고 여러 도구를 작성하는 수고를 있다.
스칼라는 두 유형의
DSL
을 모두 훌륭히 지원한다. 스칼라의 연산자 등에 대한 유연한 식별자
규칙, 메서드 호출 시 중위와 후위 호출을 지원하는 점 등은 내장
DSL
을 일반 스칼라 구문을
사용해서 작성할 있는 건축 블록을 제공한다.
스칼라테스트
ScalaTest
(
http
://
www
.
scalatest
.
org
/) 라이브러리를 사용해서 행동 주도 개발
Behavior
-
Driven
Development
(
BDD
) 방식의 테스트를 작성하는 예를 살펴보자. 스펙
2
Specs2
(
http
://
bit
.
ly
/
1tpceR3
) 라이브러리도 이와 유사하다.
//
src
/
main
/
scala
/
progscala2
/
rounding
/
scalatest
.
scX
//
스칼라테스트
예제.
단독
실행하지
마시오
.
import org
.
scalatest
.{
FunSpec
,
ShouldMatchers
}
class NerdFinderSpec extends FunSpec with ShouldMatchers
{
describe
("
nerd finder
")
{
it
("
identify nerds from a List
")
{
val actors
=
List
("
Rick Moranis
",
"
James Dean
",
"
Woody Allen
")
val finder
=
new NerdFinder
(
actors
)

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.