[clojure] Clojure 에이전트와 전역 상태

Clojure는 함수형 프로그래밍 언어로서 불변성과 순수 함수를 강조합니다. 하지만 상태를 다루는 경우가 발생할 수 있는데, 이때 Clojure는 에이전트(Agent)전역 상태(Atom)를 사용하여 변경 가능한 상태를 다루게 됩니다.

에이전트(Agent)

에이전트는 동시성 제어 및 상태 변경을 위한 도구로 사용됩니다. 에이전트를 통해 변경 가능한 상태를 안전하게 처리할 수 있고, 변경 작업을 수행하는 함수를 지연시킴으로써 동시성 문제를 감소시킬 수 있습니다.

에이전트를 생성하려면 agent 함수를 사용합니다. 예를 들어, 아래와 같이 정의할 수 있습니다.

(def my-agent (agent 0))

위의 코드는 0으로 초기화된 에이전트 my-agent를 생성합니다. 이제 send 함수를 사용하여 에이전트의 상태를 변경할 수 있습니다.

(send my-agent + 1)

위 코드는 에이전트 my-agent에 1을 더하는 작업을 보냅니다. Clojure는 보낸 작업을 큐에 넣고, 적절한 시기에 실행합니다.

전역 상태(Atom)

전역 상태(Atom)는 동시성을 고려하지 않고 상태 변경을 다룰 때 사용됩니다. 여러 스레드가 동시에 관심을 가지거나 영향을 미칠 수 있는 상태를 다룰 때 유용합니다.

전역 상태(Atom)는 atom 함수로 생성할 수 있습니다. 이를 통해 변경 가능한 상태를 선언합니다.

(def my-atom (atom 0))

이제 swap! 함수를 사용하여 전역 상태(Atom)를 변경할 수 있습니다. 아래의 코드는 전역 상태(Atom)의 값을 1 증가시킵니다.

(swap! my-atom inc)

Clojure의 에이전트와 전역 상태(Atom)은 변경 가능한 상태를 다룰 때 동시성 문제를 해결하기 위한 강력한 도구입니다. 이러한 함수형 프로그래밍 원칙과 결합하여 안전하고 효율적으로 상태를 관리할 수 있습니다.

이것은 Clojure documentation에서 참고할 수 있습니다.