인프런 커뮤니티 질문&답변
DSL 만들기
작성
·
260
답변 1
3
최태현
지식공유자
안녕하세요 혜민님! 🙂 좋은 질문 감사드려요!!!
하나씩 설명 드려볼게요! 👍
먼저 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만 봤을 때는 어렵게 느껴질 수 있어요! 🥺 이럴 때는 정말 단계별로 하나씩! 문법적인 내용과 코드를 함께 보시면 이해가 훨씬 쉬위실 겁니다~~~
답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙏





