1. module_function의 작동 원리
-
가시성 제어: private이나 protected와 유사하게 스코프 게이트 역할을 하며, 선언 이후 정의되는 메서드들을 ‘이중 용도’ 함수로 변환합니다.
-
직접 호출 가능: 모듈을 수신자로 하여
ModuleName.method형태로 유틸리티 함수를 즉시 실행할 수 있습니다. -
Private 믹스인: 클래스에 포함될 때 해당 메서드들은 private으로 설정되므로, 클래스 내부 로직에서는 자유롭게 사용하되 외부 공개 인터페이스(Public API)에는 노출되지 않습니다.
2. 설계상 이점 및 차별점
-
캡슐화 유지:
extend self패턴은 포함된 메서드들을 public으로 만드는 경향이 있으나, module_function은 이를 엄격히 private으로 제한하여 네임스페이스를 깔끔하게 유지합니다. -
유연한 확장성: 클래스에서 믹스인된 메서드를 재정의(Override)할 수 있습니다. 이때
super를 호출하면 모듈에 정의된 기본 유틸리티 로직을 그대로 활용하면서 클래스 특화 기능을 추가할 수 있습니다.
3. 실무 적용 사례
-
Rails 애플리케이션: 여러 컨트롤러에서 공통으로 사용하는 로직이나 재사용 가능한 헬퍼를 정의할 때 유용합니다.
-
공통 로직 공유: 예를 들어 다양한 3rd-party 웹훅 핸들러 간에 공통된 처리 로직을 공유하는 패턴으로 활용하여 코드 중복을 방지할 수 있습니다.