R 언어 정의: 메서드 디스패칭
R 언어 정의: 메서드 디스패칭
R의 제네릭 함수가 첫 번째 인자의 클래스 속성을 바탕으로 호출할 메서드를 결정하는 과정, 즉 메서드 디스패칭을 살펴볼게요.
출처: 문서
본문
5.3 메서드 디스패칭
제네릭 함수는 단일 문(statement)으로 구성되어야 해요. 보통 foo <- function(x, ...) UseMethod("foo", x) 형태를 취하죠. UseMethod가 호출되면 적절한 메서드를 결정하고, 그 메서드는 제네릭 호출 때와 동일한 인자들이 동일한 순서로 전달된 채 실행돼요. 마치 처음부터 메서드를 직접 호출한 것처럼 말이에요.
올바른 메서드를 결정하려면 제네릭의 첫 번째 인자의 클래스 속성을 얻어서 사용해야 해요. 제네릭 함수의 이름과 클래스 속성의 첫 번째 요소를 결합해 generic`.`class 형태로 만들고, 그 이름을 가진 함수를 찾아요. 함수가 발견되면 그 함수를 사용하고, 발견되지 않으면 클래스 속성의 두 번째 요소를 사용하죠. 이런 식으로 클래스 속성의 모든 요소를 소진할 때까지 계속 찾아요. 그 시점까지 메서드를 찾지 못하면 generic`.`default 메서드를 사용해요. 제네릭 함수의 첫 번째 인자에 클래스 속성이 없을 때도 generic`.`default를 사용하게 돼요.
네임스페이스(namespace)가 도입된 이후로 메서드는 이름으로 접근할 수 없을 수도 있어요. 즉, get("generic.class")는 실패할 수 있지만, getS3method("generic","class")로는 접근할 수 있어요.
모든 객체는 class 속성을 가질 수 있어요. 이 속성은 얼마든지 많은 요소를 가질 수 있고, 각 요소는 클래스를 정의하는 문자열이에요. 제네릭 함수가 호출되면 첫 번째 인자의 클래스가 검사돼요.