Header

  1. View current page

    딥뿔이 자라나는 노트

Profile_image?t=1225424611&type=big
나를 바꾼 똑똑한 생활 습관, 스프링노트 - 여러분도 지금 시작해보세요!
71

루비를 배우는 좋은 방법, 액티브 서포트

액티브 서포트(Active Support)는 레일스를 구현하기 위해 루비를 Rails Way’로 확장한 유틸리티 라이브러리 모음입니다. README를 보면 루비를 더 달콤하게 만들어주는 설탕 세트라는 표현을 하고 있습니다. 적절한 비유네요. Rails의 다른 컴포넌트(예를 들어 액션팩)들은 액티브 서포트 에 의존하지만, 액티브 서포트 자체는 독립적인 라이브러리입니다. 책의 부록에서 설명한 유니코드 지원 라이브러리도 액티브 서포트의 일부입니다.

예를 들면, 이런 것입니다. inject를 이용해 Enumerable의 합을 구하는 코드가 있다고 해봅시다. 대략 이런 모습일 것 입니다.

 

  1. payments.inject{ |sum, p| sum + (p.price * p.tax_rate) }

 

그런데, 액티브 서포트에 포함된 Enumerable#sum을 이용하면 아래처럼 간결하게 표현할 수 있습니다.

 

  1. payments.sum { |p| p.price * p.tax_rate }

 

의미를 훨씬 잘 드러내는 코드가 되었습니다.

 

제가 여기서 소개하고자 하는 부분은 액티브 서포트의 소스 코드입니다. 루비의 킬러 애플리케이션이라는 레일스의 명성에 걸맞게 그 코드도 읽어 볼만 하기 때문입니다. 레일스의 코드를 쉽게 읽고 이해할 수 있다면, 루비를 마스터했다고 해도 과언이 아닙니다.

 

위에서 활용한 Enumerable#sum의 소스 코드도 별로 어렵지 않습니다. 하지만 루비의 블럭을 활용한 좋은 예제입니다.

 

  1. module Enumerable
    1. def sum(identity = 0, &block)
      1. return identity unless size > 0
        1. if block_given?
          1. map(&block).sum
        2. else
          1. inject { |sum, element| sum + element }
        3. end
      2. end
    2. end

 

레일스 중에서 액티브 서포트가 루비의 다양한 면을 보여줄 수도 있고, 독립적인 면이 크기 때문에, 잠깐 잠깐 읽고 분석해보기 좋습니다.

저도 기회가 되는대로 이 블로그를 통해 액티브 서포트의 코드를 몇 가지 소개해보겠습니다.

 

전체보기

 

- 강문식

History

Last edited on 06/20/2007 20:45 by deepblue

Comments (0)

You must log in to leave a comment. Please sign in.