작성
·
195
답변 1
2
안녕하세요 혜민님! 🙂 좋은 질문 감사드려요!!!
하나씩 설명 드려볼게요! 👍
먼저 env().`is`()
를 뜯어보면, env()
라는 함수를 호출한 이후, 곧 바로 is()
라는 함수를 연이어 호출한 모양입니다! 간단하죠?! 그럼 다음과 같이 코드를 작성할 수 있을거에요!
data class Environment(
val key: String,
val value: String?
) {
fun `is`(value: String): Environment {
this.value = value
return this
}
}
fun env(key: String): Environment() {
return Environment(key, null)
}
여기서 is
라는 함수를 쓸 때 백틱 ` 을 붙이는 이유는, 코틀린에서 is
라는 별도의 예약어가 있기 때문입니다! 👍
위의 코드를 사용해보면요!
env("USER")
까지 했을 때 Environment 클래스가 USER 라는 문자열이 key에 들어가 생성되고
env("USER").`is`("PASSWORD")
is
라는 함수를 호출까지 하면, value에 "PASSWORD"라는 문자열이 들어간 후 최종적으로 Environment 클래스가 완성되게 됩니다!
물론 is 함수를 클래스 안에 넣으셔도 되고, 코틀린의 확장 함수를 사용하셔도 될 것 같아요~ 👍
이 DSL 이란 부분 자체가 코틀린의 문법을 요렇게 저렇게 막 돌려 활용하다 보니, 완성된 DSL만 봤을 때는 어렵게 느껴질 수 있어요! 🥺 이럴 때는 정말 단계별로 하나씩! 문법적인 내용과 코드를 함께 보시면 이해가 훨씬 쉬위실 겁니다~~~
답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙏