루비스러운 코드

루비 코딩이 재미있는 이유는 무엇보다 ‘루비스러움’을 추구하는데서 오는 만족감에 있다. 깨끗한 코드를 생산했을 때의 쾌감을 아는 개발자라면 ‘루비’가 제격이다.

 

그렇다면 ‘루비스러운’ 코드가 뭘까? DSL을 주제로 하는 A Firstful of Languages에 올라온 메뉴를 만드는 코드(Example Mini Language: MenuBuilder)를 보면 조금 알 것 같다.

 

  1. mymenu = Node.new(:root, ‘root’)
    questions = mymenu.add_node(:q, ‘/q’, ‘Questions’)
    answers   = mymenu.add_node(:a, ‘/a’, ‘Answers’)
    letters   = mymenu.add_node(:letter, ‘’, ‘Letters’)
    bill      = letters.add_node(:bill, ‘/letter/bill’, ‘To Bill’)
    steve     = letters.add_node(:stever, ‘/letter/steve’, ‘To Steve’)


데이터 스트럭처 시간에 만들어보았을 것 같은 트리를 만드는 전형적인 모습의 코드이다. 하지만 반복되는 문자때문에 쉽게 눈에 들어오지 않는다. 루비 공동체가 추구하는 제1원칙 ‘DRY’에 위배된다. 아래 코드가 훨씬 루비스러운 코드이다.

 

  1. mymenu = menu do
            item :q, ‘/q’, ‘Questions’
            item :a, ‘/a’, ‘Answers’
            item :letter, ‘’, ‘Letters’ do
              item :bill, ‘/letter/bill’, ‘To Bill’
              item :steve, ‘/letter/steve’, ‘To Steve’
            end
    end


블록 문법을 이용하니 훨씬 간결하게 표현이 되었다. 이런 간결함, 읽기 편함, 아름다움을 추구하는 것이 루비스러움이다. 그리고 위 코드보다 아래같은 코드를 만들었을 때 훨씬 즐겁다.


도에인 언어를 만들겠다고 시작하는 것이 아니라, 루비스러움을 추구하다보니 최종 결과물이 도메인 언어처럼 보이는 것이다.