옵저버 패턴은 객체 간의 일대다(one-to-many) 의존성을 정의하는 행동 디자인 패턴입니다. 주체(Subject) 객체의 상태가 변경되면, 이에 종속된 모든 관찰자(Observer) 객체에게 자동으로 알림이 전송됩니다. 이는 주체 객체가 특정 관찰자에 대한 지식 없이 변경 사항을 브로드캐스트할 수 있도록 하여 느슨한 결합을 달성합니다.
Ruby에서의 옵저버 패턴 구현
- 주체(Subject) 구현:
Employee클래스는 변경 사항을 관찰할observers목록을 유지합니다.add_observer(observer): 관찰자를 목록에 추가합니다.notify_observers: 모든 등록된 관찰자의update메서드를 호출하여 변경 사항을 알립니다.salary=메서드에서 급여 변경 후notify_observers를 호출합니다.
- 관찰자(Observer) 구현:
Payroll및HR클래스는 주체로부터 알림을 받을update(employee)메서드를 정의합니다.Payroll#update: 급여 변경 시 새로운 급여명세서 발행을 알립니다.HR#update: 인사 기록 업데이트를 알립니다.
- 연결:
Employee인스턴스에Payroll및HR인스턴스를 옵저버로 등록하면,Employee의 급여가 변경될 때 두 부서 모두 자동으로 알림을 받게 됩니다.
Rails 콜백과 옵저버 패턴
Rails의 Active Record 콜백(before_save, after_save 등)은 옵저버 패턴과 유사하게 작동합니다. 이는 객체의 특정 라이프사이클 이벤트 발생 시 미리 정의된 동작을 실행합니다. 본문에서는 이를 모방하여 Ruby에서 커스텀 콜백 시스템을 구현하는 방법을 제시합니다.
CallbackHandler: 콜백 유형(:before_save,:after_save)별로 메서드 이름을 등록하고 관리합니다.Callbacks모듈: 클래스 메서드before_save,after_save를 통해 콜백을 등록하고, 인스턴스 메서드save에서 등록된 콜백을 실행합니다.- 이러한 커스텀 구현은
Post클래스에서sanitize_content를before_save로,notify_followers를after_save로 등록하여 객체 저장 전후에 특정 로직이 자동으로 실행되도록 합니다.