ADD-METHOD — 제네릭 함수에 메서드 추가

ADD-METHOD — 제네릭 함수에 메서드 추가

ADD-METHOD는 **표준 제네릭 함수(standard generic function)**예요. 제네릭 함수에 메서드를 하나 추가할 때 쓰죠. 보통 defmethoddefgeneric이 메서드 등록을 대신 처리해 주기 때문에 직접 호출할 일은 드물지만, 메서드를 객체로 다뤄야 할 때는 이 함수가 필요해요.

출처: CLHS Standard Generic Function ADD-METHOD

본문

시그니처는 다음과 같아요.

add-method generic-function method => generic-function

메서드 시그니처는 이렇게 정의돼 있어요.

add-method (generic-function standard-generic-function) (method method)

인자를 보면요.

  • generic-function — 제네릭 함수 객체.
  • method — 메서드 객체.

동작은 이렇습니다. add-methodgeneric-functionmethod를 추가해요. 만약 그 메서드가 파라미터 스페셜라이저(parameter specializers)와 퀄리파이어(qualifiers) 면에서 기존 메서드와 일치한다면, 기존 메서드는 새 메서드로 교체돼요.

예외 상황도 확인해 두어야 해요.

  • method의 메서드 함수 람다 리스트가 generic-function의 람다 리스트와 일치(congruent)하지 않으면 error 타입 오류가 발생해요.
  • method가 이미 다른 제네릭 함수 소속이면 error 타입 오류가 발생해요.

예제는 없어요. defmethod, defgeneric, find-method, remove-method, 그리고 Section 7.6.3(파라미터 스페셜라이저와 퀄리파이어의 일치 규칙)과 함께 이해하는 게 자연스러워요. 메서드 추가와 대칭되는 제거는 remove-method가 맡아요.