반응형
Kotlin in Action Chap.11 QnA🔍
해당 글은 <코틀린 인 액션> 11장을 읽고 스터디원들과 나눈 QnA를 정리한 것입니다. (코틀린 인 액션의 11장 내용 정리는 아래 글 참조)
#SL 구조: 여러 번의 함수 호출에 대해 같은 context
코틀린 DSL에서는 보통 람다를 중첩시키거나 메소드 호출을 연쇄시키는 구조를 가진다. DSL에서는 질의를 실행하기 위해 필요한 메소드들을 조합해야하며, 그렇게 메소드를 조합해서 만든 질의는 질의에 필요한 인자를 메소드 호출 하나에 모두 넘기는 것보다 훨씬 더 가독성이 높다.
일반적으로 라이브러리는 많은 메소드를 가지고 있으며, 클라이언트는 이러한 메소드를 하나씩 호출함으로써 라이브러리를 사용할 수 있다. 이러한 일련의 호출에 대한 내부적인 구조나 맥락은 존재하지 않는다. 이러한 API를 command-query API
라고 부른다. 이와는 반대로, DSL에서의 메소드 호출은 좀 더 큰 구조를 가지고 있는데, 이는 DSL의 grammar로 정의된다. 즉 설명하자면 일련의 호출에 대한 구조를 제공한다고 할 수 있다.
이로 인해 생기는 DSL 구조의 장점은 같은 문맥을 함수 호출 시마다 반복하지 않고도 재사용할 수 있다는 점이다. 다음과 같이 chained method calls
(연속적인 코드 줄에서 개체의 Method를 반복적으로 호출하는 것)로 구조를 만드는 경우를 살펴보자.
//kotlintest - internal DSL
str should startWith("kot")
//JUnit APIs - not readable
assertTrue(str.startsWith("kot"))
예를 들어서, 수학 공식을 예로 들자면 A*B+A-B
를 A◇B
라는 기호로 대체한다고 생각하면 된다. DSL은 이런 식으로 인터페이스를 제공함으로써 객체의 캡슐화와 다양한 문맥에서의 재사용을 보장할 수 있다.
반응형
'📱Kotlin > [GDSC] Kotlin in Action 스터디' 카테고리의 다른 글
[GDSC] Kotlin in Action 스터디 회고 (0) | 2023.06.05 |
---|---|
[코틀린 인 액션] Kotlin in Action 10장 보충읽기 (0) | 2023.06.04 |
[코틀린 인 액션] Kotlin in Action 9장 보충읽기 (0) | 2023.06.04 |
[코틀린 인 액션] Kotlin in Action 8장 보충읽기 (1) | 2023.05.30 |
[코틀린 인 액션] Kotlin in Action 7장 보충읽기 (0) | 2023.05.30 |