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