[clojure] Clojure 에이전트와 상태 변경 알림

Clojure에서 에이전트는 변경 가능한 상태를 캡슐화하는 데 사용됩니다. 에이전트는 독점적으로 액세스 가능한 상태를 갖고 있으며, 여러 스레드가 이에이젼트의 상태를 비동기적으로 변경할 수 있습니다.

에이전트는 상태가 변경될 때 특정 함수를 호출하여 알림을 받을 수 있습니다. 이를 통해 상태 변경 시에 추가적인 작업을 수행하거나 다른 시스템에 상태 변경을 알릴 수 있습니다.

에이전트 생성하기

Clojure에서 에이전트를 생성하려면 agent 함수를 사용합니다.

(def my-agent (agent {:status "active"}))

이 코드는 초기 상태가 {:status "active"}인 새로운 에이전트를 만듭니다.

상태 변경 함수 정의하기

에이전트의 상태를 변경하기 위해 send 함수를 사용합니다. 새로운 상태를 계산하는 함수를 지정하여 호출합니다.

(send my-agent update-status {:status "inactive"})

위의 코드에서 update-status 함수는 현재 상태를 인수로 받아서 새로운 상태를 계산하여 반환하는 함수입니다.

상태 변경 알림 처리

에이전트의 상태가 변경될 때, add-watch 함수를 통해 알림을 받을 수 있습니다.

(add-watch my-agent :status-change 
  (fn [key agent old-state new-state]
    (println "상태가 변경되었습니다." new-state)))

위의 코드에서 :status-change는 알림을 식별하는 키입니다. 상태가 변경될 때 마다 알림 함수가 호출되어 변경된 상태를 출력합니다.

이와 같이 Clojure의 에이전트를 활용하면 상태 변경을 관리하고, 상태의 변경을 감지하여 알림을 받을 수 있습니다.

참고: Clojure 공식 문서