Observer 패턴


[네이버 지식백과]observer 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))

Observer 패턴은 정말 많이 사용하는 패턴입니다. 자바 프레임워크에서도 쉽게 찾을 수 있습니다.  우리가 흔히 쓰는 Java C#에서 Event Listener 들이 이 종류에 속하지요.

Observer pattern을 예제를 위해서는

observer_t: 관찰자 Structure
calculate_temperature : 온도를 측정하는 루틴
display_degree_handler : 화면에 측정된 온도를 표시하는 루틴
file_write_degree_handler : 파일에 측정된 온도를 표시하는 루틴 

우선 헤더를 보겠습니다.

observer_handler_t 가 바로 관찰자 콜백함수 입니다. 어떠한 계산이 완료된 후 그 계산값을 등록된 핸들러를 호출하여 넘길 예정입니다. 이러한 핸들러를 등록, 삭제하는 함수들이 register_observer, unregister_observer 들입니다. 다음은 실제로 observer를 등록하고 삭제하는 코드를 보도록 하겠습니다. temperature.c 에 있습니다. 별다른 내용은 없고 핸들러 등록, 삭제하는 역할만 합니다.

계속해서 temperature.c 코드를 보겠습니다. 계산된 값을 update_observer에 넘겨주면 등록된 핸들러들을 호출하여 온도 값을 넘겨주게 됩니다. 여기서 파라메타가 두개인 이유는 딱히 없습니다. 만약을 위해 미리 하나 더 추가하였습니다. 


마지막으로 main.c에서 observer 핸들러를 등록하고 사용하는 방법을 보도록 하겠습니다. 먼저 핸들러(콜백) 함수들을 만들고 observer 등록을 시켰습니다. 각각의 핸들러들은, 1초 마다 calculate_temperature()를 호출하여 계산된 결과를 받아볼 것입니다. 

위의 코드에서는 main 무한루프에서 1초에 한번씩 calculate_temperature를 호출하였으나, interrupt 라든지, timer 라든지 아니면 버튼을 누를경우에만 호출하든지 다방면에서 알맞게 쓰시면 됩니다. 


이상으로 observer 패턴을 알아봤습니다. 명칭만 다르지 java에서 listener, c++ callback등 다양하게 정말 많이 사용됩답니다.








'▶ 이전글 > C Pattern' 카테고리의 다른 글

Template method 패턴  (0) 2014.10.02
Strategy 패턴  (0) 2014.10.02
State 패턴  (4) 2014.10.02
C로 Class 억지로 만들기  (1) 2014.10.02
typedef의 활용 함수포인터  (0) 2014.10.02