Behaviour
Behaviour
behaviour(비헤이비어)를 다루기 위한 메커니즘이에요. 다만 이 모듈은 이제 deprecated(사용이 권장되지 않음) 상태예요. 대신 @callback과 @macrocallback 모듈 속성을 쓰는 걸 권장해요.
본문
이 모듈은 deprecated 상태예요. defcallback/1과 defmacrocallback/1 대신, 각각 @callback과 @macrocallback 모듈 속성을 쓰면 돼요. 이 속성들에 대한 자세한 내용은 Module 문서를 참고하세요.
또한 MyModule.__behaviour__(:callbacks) 대신 MyModule.behaviour_info(:callbacks)를 쓸 수 있어요. behaviour_info/1은 Module에 문서화되어 있어요.
간단히 말해, behaviour(행동)는 "이 모듈은 이렇게 생긴 함수를 반드시 구현해 줘"라는 계약(contract)을 정의하는 장치예요. 다른 모듈이 behaviour를 사용하면, 그 모듈은 계약에 적힌 콜백들을 실제로 구현해야 해요. 그런데 지금은 이 모듈 대신 더 현대적인 @callback 속성 기반 접근을 쓰는 게 표준이에요.
함수
defcallback(spec) (deprecated)
주어진 타입 스펙에 따라 함수 콜백을 정의해요.
이 매크로는 deprecated 상태예요. 대신 @callback 모듈 속성을 쓰세요.
defmacrocallback(spec) (deprecated)
주어진 타입 스펙에 따라 매크로 콜백을 정의해요.
이 매크로는 deprecated 상태예요. 대신 @macrocallback 모듈 속성을 쓰세요.
현대적인 사용법은 아래처럼 behaviour 모듈 안에서 @callback 속성으로 계약을 선언하는 형태예요.
defmodule MyBehaviour do
@callback handle_call(term, from, state) :: {:reply, term, state}
end
그리고 이 behaviour를 사용하는 모듈은 @behaviour 속성으로 계약을 연결하고, 필요한 함수를 구현하면 돼요.
더 알아보기
- Module:
@callback,@macrocallback,@behaviour등 모듈 속성에 대해 - behaviour_info/1: 콜백 목록을 조회하는 현대적인 API
- GenServer: behaviour를 실제로 활용하는 대표적인 OTP 서버