NextMethod

NextMethod

NextMethod는 R에서 간단한 상속 메커니즘을 제공하는 특수 함수예요. 이 문서에서는 NextMethod의 동작 방식과 인자 처리 규칙을 살펴볼게요.

출처: 문서

본문

NextMethod

NextMethod는 간단한 상속 메커니즘을 제공하는 데 사용돼요. NextMethod 호출로 인해 호출된 메서드는 이전 메서드에서 호출된 것처럼 동작해요. 상속된 메서드에 전달되는 인자는 현재 메서드 호출과 같은 순서와 같은 이름을 가져요. 즉, 제네릭 호출과 동일한 인자들이에요. 다만 인자에 대한 표현식은 현재 메서드의 해당 형식 인자 이름이에요. 그래서 인자들은 NextMethod가 호출된 시점의 값에 해당하는 값을 갖게 돼요. 평가되지 않은 인자는 평가되지 않은 채로 남고, 누락된 인자는 누락된 채로 남아요.

NextMethod 호출 구문은 NextMethod(generic, object, ...)예요. generic이 제공되지 않으면 .Generic 값이 사용돼요. object가 제공되지 않으면 현재 메서드 호출의 첫 번째 인자가 사용돼요. ... 인자의 값들은 다음 메서드의 인자를 수정하는 데 사용돼요.

다음 메서드의 선택이 객체가 아니라 .Generic.Class의 현재 값에 달려 있다는 점을 이해하는 게 중요해요. 따라서 NextMethod 호출에서 객체를 변경하면 다음 메서드가 받는 인자에는 영향을 주지만 다음 메서드 선택에는 영향을 주지 않아요.

메서드는 직접 호출될 수 있어요. 그런 경우 .Generic, .Class, .Method가 없어요. 이때는 NextMethodgeneric 인자를 반드시 지정해야 해요. .Class 값은 현재 함수의 첫 번째 인자인 객체의 클래스 속성으로 간주돼요. .Method 값은 현재 함수의 이름이에요. 이런 기본값 선택 덕분에 메서드가 직접 호출되든 제네릭 호출을 통해 호출되든 메서드의 동작이 달라지지 않아요.

논의가 필요한 문제는 NextMethod에 전달되는 ... 인자의 동작이에요. White Book은 그 동작을 다음과 같이 설명해요.

  • 이름 있는 인자는 현재 메서드 호출에서 해당하는 인자를 대체해요. 이름 없는 인자는 인자 목록의 시작 부분에 배치돼요.

제가 원하는 동작은 다음과 같아요.

  • 먼저 NextMethod에 대한 인자 매칭을 수행해요.
    • object나 generic이 변경되어도 괜찮아요.
    • 이름 있는 리스트 요소가 인자(이름이 있든 없든)와 일치하면 리스트 값이 인자 값을 대체해요.
    • 첫 번째 이름 없는 리스트 요소.

검색 값:

  • Class: 먼저 .Class에서, 다음으로 메서드의 첫 번째 인자에서, 마지막으로 NextMethod 호출에서 지정된 object에서 가져와요.
  • Generic: 먼저 .Generic에서, 없으면 메서드의 첫 번째 인자에서, 그래도 없으면 NextMethod 호출에서 가져와요.
  • Method: 그냥 현재 함수 이름이면 돼요.

더 알아보기 (Learn more)

출처: R Language Definition - NextMethod