We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2023.07.28 금 9:00-10:00
챕터9. 리팩터링, 테스팅, 디버깅 챕터10. 람다를 이용한 도메인 전용 언어
최승위
이성온
정민교
The text was updated successfully, but these errors were encountered:
DSL은 특정 비즈니스 도메인의 문제를 해결하려고 만든, 작은, 범용이 아닌 특정 도메인을 대상으로 만들어진 특수 프로그래밍 언어다.
DSL에서 동작과 용어는 특정 도메인에 국한되므로 다른 문제는 걱정할 필요가 없어서 특정 도메인의 복잡성을 더 잘 다룰 수 있고, 저수준 구현 메서드는 클래스의 비공개로 만들어서 저수준 구현 세부 내용은 숨길 수 있어서 가독성이 좋아진다.
DSL을 개발할 때는 아래 내용을 항상 생각해야 한다.
간결함
API는 비지니스 로직을 간편하게 캡슐화하므로 반복을 피할 수 있고 코드를 간결하게 만들 수 있다.
가독성
도메인 영역의 용어를 사용하므로 비 도메인 전문가도 코드를 쉽게 이해할 수 있다.
결과적으로 다양한 조직 구성원 간에 코드와 도메인 영역이 공유될 수 있다.
유지보수
잘 설계된 DSL로 구현한 코드는 쉽게 유지 보수할 수 있다.
유지보수는 비지니스 관련 코드 즉 가장 빈번히 바뀌는 애플리케이션 부분에 특히 중요하다.
높은 수준의 추상화
DSL은 도메인과 같은 추상화 수준에서 동작하므로 도메인의 문제와 직접적으로 관련되지 않은 세부 사항을 숨긴다.
집중
비지니스 도메인의 규칙을 표현할 목적으로 설계된 언어이므로 프로그래머가 특정 코드에 집중할 수 있어 결과적으로 생산성이 좋아진다.
관심사 분리
애플리케이션의 인프라구조와 관련된 문제와 독립적으로 비지니스 관련된 코드에서 집중하기가 용이해 결과적으로 유지보수가 쉬운 코드를 구현한다.
DSL 설계의 어려움
간결하게 제한적인 언어에 도메인 지식을 담는 것이 쉬운 작업은 아니다.
개발 비용
코드에 DSL을 추가하는 작업은 초기 프로젝트에 많은 비용과 시간이 소모되는 작업이다.
또한 DSL 유지보수와 변경은 프로젝트에 부담을 주는 요소다.
추가 우회 계층
DSL은 추가적인 계층으로 도메인 모델을 감싸며 이때 계층을 최대한 작게 만들어 성능 문제를 회피한다.
새로 배워야 하는 언어
요즘에는 한 프로젝트에 여러 언어를 사용하는 추세다.
하지만 DSL을 프로젝트에 추가하면서 배워야 하는 언어가 한 개 더 늘어난다는 부담이 있다.
여러 비지니스 도메인을 다루는 개별 DSL을 사용하는 상황이라면 개별 DSL이 독립적으로 진화할 수 있기 때문에 유기적으로 동작하도록 합치는 일은 쉬운 일이 아니다.
호스팅 언어 한계
일부 자바 같은 범용 프로그래밍 언어는 장황하고 엄격한 문법을 가졌다.
이런 언어로는 사용자 친화적 DSL을 만들기 힘들다. 사실 장황한 프로그래밍 언어를 기반으로 만든 DSL은 성가진 문법의 제약을 받고 읽기가 어려워진다. Java8의 람다 표현식은 이 문제를 해결할 강력한 새 도구다.
기존 자바 언어를 이용하면 외부 DSL에 비해 새로운 패턴과 기술을 배워 DSL을 구현하는 노력이 현저하게 줄어든다.
순수 자바로 DSL을 구현하면 나머지 코드와 함께 DSL을 컴파일할 수 있다. 따라서 다른 언어의 컴파일러를 이용할 필요없음(비용절감)
다른 언어가 필요없음
DSL 사용자는 기존의 자바 IDE를 이용해 자동완성 자동 리팩터링 같은 기능을 그대로 사용하며 사용할 수 있음.
한개의 언어로 한개의 도메인 또는 여러 도메인을 대응하지 못할때 java를 이용하여 DSL 설계할 경우 DSL 합치기가 쉬움
Sorry, something went wrong.
s5646s
so3500
jeongminkyo
No branches or pull requests
스터디 날짜
2023.07.28 금 9:00-10:00
내용
챕터9. 리팩터링, 테스팅, 디버깅
챕터10. 람다를 이용한 도메인 전용 언어
공유
최승위
이성온
정민교
The text was updated successfully, but these errors were encountered: