ALLOCATE-INSTANCE — 초기화 없이 인스턴스 생성
ALLOCATE-INSTANCE — 초기화 없이 인스턴스 생성
ALLOCATE-INSTANCE는 **표준 제네릭 함수(standard generic function)**예요. 클래스의 인스턴스를 초기화하지 않고 만들어 돌려줄 때 써요. 보통 객체를 만들 때는 make-instance가 생성과 초기화를 한 번에 처리하지만, 그 내부에서 실제 인스턴스 공간을 확보하는 역할을 allocate-instance가 맡고 있어요.
본문
시그니처는 다음과 같아요.
allocate-instance class &rest initargs &key &allow-other-keys => new-instance
메서드 시그니처는 이렇게 정의돼 있어요.
allocate-instance (class standard-class) &rest initargs
allocate-instance (class structure-class) &rest initargs
인자를 보면요.
- class — 클래스.
- initargs — 키워드/값 쌍(초기화 인자 이름과 값)의 리스트.
- new-instance — 클래스가
class인 객체.
동작은 이렇습니다. 이 제네릭 함수는 class의 새 인스턴스를 만들어 돌려주되 초기화는 하지 않아요. 클래스가 standard-class면 슬롯이 바인딩되지 않은(unbound) 상태죠. structure-class면 슬롯 값이 불특정(unspecified)이에요. 이 함수를 호출하는 쪽은 이미 초기화 인자를 검사했을 거라고 가정해요.
allocate-instance는 Section 7.1(객체 생성과 초기화)에 설명된 대로 make-instance가 내부적으로 호출해요. 그래서 보통은 직접 부르기보다 make-instance를 쓰는 게 일반적이에요.
한 가지 짚어둘 점이 있어요. 이 제네릭 함수에 메서드를 추가했을 때의 결과는 불특정(unspecified)이에요. 이 기능은 메타오브젝트 프로토콜(Metaobject Protocol)에서 추가될 수도 있는 영역이라, 임의로 메서드를 붙이는 건 피하는 게 좋아요.
관련 내용으로는 defclass, make-instance, class-of, Section 7.1을 함께 보면 돼요.