특정 도메인(산업, 분야등 특정 영역)에 특화된 언어
Dave Thomas
“문제 영역의 해결에는 그 영역의 언어를 전제로 둬야하며, 거기에서 프로그래밍 솔루션을 꺼내는 것이 중요하다.”
호스트 언어 구문을 이용하여 자체적으로 의존하는 무언가를 만드는 경우에 해당
내부 DSL에서는 API와 DSL의 경계가 모호해 비슷하게 생각하는 경향 존재
→ 좀 더 일반 사용자가 알아보기 쉬운 API가 내부 DSL로 생각하면 됨
호스트 언어 능력과 지금까지 사용하던 도구를 그대로 사용할 수 있다는 점, 처리 결과를 쉽게 예측할 수 있어서 해당 언어를 잘 알면 원활한 사용 가능
메타 프로그래밍의 형태로 언어에 미니 언어를 만들 수 있음
💡MetaProgramming : 자기 자식 혹은 다른 컴퓨터 프로그램으로 데이터로 취급하며 프로그램을 작성/수정하는것
원래 언어로 새로운 구문으로 도입 → 언어 확장을 일으켜 다른 언어가 됨
인라인 코드 형태로 표현될 수 있다.
적합한 언어: Lisp, Ruby, Smalltalk
호스트 언어와 다른 언어(XML, Makefile과 같은 고유 형식)에서 생성된 DSL
GUI도구를 제공해주는 것이 특징
외부 DSL에서는 DSL과 범용 언어(GPL : General Purpose Language)과의 경계가 모호해지는 경향 존재
→ 언어 작성자와 언어 사용자의 목적에 따라 자유롭게 DSL의 형식을 결정할 수 있음
적합한 언어: Java, C#, C++
반복이 제거되고 비슷한 처리 코드는 자동 생성(템플릿)됨
프로그래밍 코드의 양이 적고 가독성이 높음
특정 프로그래머(lay programmer - martin fowler)들과 원활한 커뮤니케이션 가능 - XML, CSS, SQL 등
설계의 복잡성
설계가 완전하지 않을 경우 읽기 어려운 코드가 됨
하위 호환성 유지 필요
Java
Ruby
기타