Ruby 모듈에서 extend self 사용하기

Module extend self

작성자
GoRails Youtube
발행일
2025년 11월 18일

핵심 요약

  • 1 Ruby의 `extend self`는 모듈 내 인스턴스 메서드를 모듈 자체에서 직접 호출 가능한 모듈 레벨 메서드로 변환합니다.
  • 2 모듈 자체에 `@인스턴스_변수`를 정의하고 `attr_accessor`를 통해 외부에서 접근 및 수정하여 모듈의 상태를 관리할 수 있습니다.
  • 3 객체 인스턴스화가 불필요한 유틸리티성 기능 구현 시, 깔끔하고 효율적인 코드 구성을 가능하게 합니다.

도입

이 영상은 Ruby 모듈 내에서 `extend self` 키워드를 활용하는 방법을 소개합니다. `extend self`는 모듈에 정의된 인스턴스 메서드를 모듈 자체에서 직접 호출할 수 있는 모듈 레벨 메서드로 변환하는 강력한 기능입니다. 이를 통해 객체 인스턴스화 없이 모듈을 유틸리티 컨테이너처럼 활용하며 코드 구조를 단순화하고 모듈의 활용도를 높일 수 있습니다.

extend self는 Ruby 모듈의 인스턴스 메서드를 모듈 자체에서 직접 호출할 수 있도록 만드는 핵심적인 역할을 합니다.

extend self의 작동 방식

  • 모듈 내부에 extend self를 선언하면, 해당 모듈에 정의된 모든 def 메서드는 모듈의 인스턴스 메서드가 아닌, 모듈 자체의 메서드로 동작합니다.

  • 이는 MyModule.my_method와 같이 모듈 이름을 통해 직접 메서드를 호출할 수 있음을 의미하며, 별도의 includeextend 없이 유틸리티 기능을 제공할 수 있습니다.

예시: CurrencyFormatter 모듈

영상의 예시에서는 CurrencyFormatter 모듈을 통해 통화 형식 지정 기능을 구현합니다. ```ruby module CurrencyFormatter extend self @default_currency = “USD” # 모듈 레벨 인스턴스 변수

def format(amount, currency = @default_currency) “#{currency} %.2f” % amount # 금액을 두 자리 소수점으로 포맷 end # … format_list 메서드도 유사하게 정의 end ```

  • extend self 덕분에 CurrencyFormatter.format(12.5)와 같이 모듈 이름을 통해 format 메서드를 직접 호출할 수 있습니다.

  • @default_currency와 같은 모듈 레벨 인스턴스 변수를 사용하여 모듈의 기본 상태를 유지할 수 있습니다.

모듈 설정 변경: attr_accessor 활용

모듈의 기본 설정을 동적으로 변경해야 할 경우, attr_accessor를 활용하여 모듈 레벨의 인스턴스 변수에 대한 접근자를 노출할 수 있습니다. ruby module CurrencyFormatter extend self attr_accessor :default_currency # 접근자 추가 @default_currency = "USD" # ... end # 외부에서 기본 통화 변경 가능: CurrencyFormatter.default_currency = "EUR"

  • attr_accessor :default_currency를 추가함으로써, CurrencyFormatter.default_currency = "EUR"와 같이 모듈의 상태를 외부에서 쉽게 변경할 수 있습니다.

활용 사례

extend self는 특정 클래스의 인스턴스화가 필요 없는 유틸리티성 메서드 그룹을 모듈로 구성할 때 매우 유용합니다. 수학 계산, 문자열 처리, 데이터 검증 등 상태를 크게 가지지 않으면서 독립적인 기능을 제공하는 모듈에 적합합니다.

결론

`extend self`는 Ruby 모듈을 활용하여 인스턴스화할 필요가 없는 객체 지향적 기능을 구현할 수 있도록 돕는 매우 유용한 기능입니다. 이를 통해 모듈 내의 인스턴스 메서드를 모듈 자체의 클래스 메서드처럼 사용할 수 있으며, 모듈 레벨 인스턴스 변수와 `attr_accessor`를 활용해 유연하게 상태를 관리할 수 있습니다. 자주 사용되지는 않지만, 특정 유틸리티성 기능을 깔끔하게 구성할 때 효과적인 솔루션을 제공합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!