시스템 클래스 GENERIC-FUNCTION — 제네릭 함수
시스템 클래스 GENERIC-FUNCTION — 제네릭 함수
같은 이름의 함수가 인자의 클래스에 따라 다르게 동작하도록 만들고 싶을 때, 바로 CLOS의 제네릭 함수(generic function)를 생각하게 되죠. 이 페이지는 제네릭 함수가 무엇인지 정리한 내용이에요.
클래스 우선순위 목록
generic-function, function, t
본문 (Description)
제네릭 함수(generic function) 는 자신에게 주어진 인자의 클래스나 동일성(identity)에 따라 행동이 달라지는 함수입니다.
제네릭 함수 객체는 다음과 같은 정보를 담고 있어요.
- 메서드(methods) 의 집합
- 람다 리스트(lambda list)
- 메서드 결합 타입(method combination type)
- 그 밖의 정보
여기서 메서드들은 제네릭 함수의 클래스별 행동과 연산을 정의합니다. 어떤 메서드가 제네릭 함수를 특화(specialize) 한다고 표현해요.
제네릭 함수가 호출되면, 자신의 인자들의 클래스나 동일성에 기반해 메서드들의 부분집합을 실행합니다. 즉 평범한 함수처럼 하나의 본문만 실행하는 게 아니라, 인자에 맞는 메서드들을 골라 실행하는 거죠.
중요한 점은 제네릭 함수도 일반 함수와 똑같은 방식으로 사용할 수 있다는 거예요. 구체적으로:
funcall과apply의 인자로 쓸 수 있고- 전역(global) 또는 지역(local) 이름을 가질 수 있습니다
즉 제네릭 함수는 "특별한 함수"라기보다, 다형적 호출을 지원하는 일종의 함수 타입이라고 이해하면 돼요.
더 알아보기 (Learn more)
- 원문: System Class GENERIC-FUNCTION
- CLOS 개요: The Common Lisp Object System
defgeneric: Macro DEFGENERIC