시작하기무료로 시작하기

이름에 담긴 의미는?

S3는 엄격한 이름 규칙을 사용해요. 모든 S3 메서드는 generic.class 형태의 이름을 가져요.

하지만 그 역은 성립하지 않아요. 점(.)이 들어간 이름이라고 해서 S3 메서드인 것은 아니에요. 이는 S 언어 초창기부터 존재하던 많은 함수에서 볼 수 있는 현상이에요. 예를 들어 all.equal()(docs)은 실제로 메서드가 아니라 S3 제네릭이에요. (이런 점에서 leopard.case 표기법은 혼란을 줄 수 있어요.)

어떤 함수가 S3 제네릭인지 확인하려면 pryr 패키지의 is_s3_generic()(docs)을 호출하면 돼요. 콘솔에 함수 이름을 입력해 출력해 보고, 그 안에서 UseMethod()를 호출하는지도 확인할 수 있어요.

비슷하게, 함수가 S3 메서드인지 확인하려면 pryris_s3_method()(docs)를 호출하면 돼요. 예를 들어,

library(pryr)
is_s3_generic("t")           # 전치(Transpose)용 제네릭 함수
is_s3_method("t.data.frame") # data.frame 전치 메서드
is_s3_method("t.test")       # Student의 t-검정 함수

다음 중 옳은 설명은 무엇인가요?

  1. is.complex()(docs)는 complex 객체에 작동하는 is 제네릭의 메서드이다.
  2. seq.Date()(docs)는 Date 객체에 작동하는 seq 제네릭의 메서드이다.
  3. is.na.data.frame()(docs)는 data.frame 객체에 작동하는 is.na 제네릭의 메서드이다.
  4. sort()(docs)는 제네릭 함수이다.
  5. order()(docs)는 제네릭 함수이다.

이 연습은 강의의 일부입니다

R에서 S3와 R6로 배우는 Object-Oriented Programming

강의 보기

실습형 인터랙티브 연습문제

이론을 실습으로 바꾸는 인터랙티브 연습 중 하나를 만나보세요

연습 시작