R프로그래밍

S3란?

funfunweb 2026. 2. 3. 15:20

S3는 객체의 class에 따라 같은 함수가 다르게 동작하도록 하는 R의 가장 기본적인 객체 시스템이다.

 

R에서는 같은 함수 이름이 이렇게 동작합니다

summary(1:5)
summary(data.frame(a=1:5))

결과

함수는 같은데 결과는 완전히 다름  - 이유: 객체의 class가 다르기 때문

이 규칙이 바로 S3

 

S3의 핵심 구성요소 (3가지)

① class

class(x)

 

  • 객체의 정체성
  • 행동 방식 결정

 

② generic function (제네릭 함수)

summary()
print()
plot()
  • 실제 일을 하지 않음
  • 어떤 메서드를 쓸지 결정

③ method (메서드)

summary.data.frame
summary.factor
summary.default

 

  • 실제 동작 함수
  • 이름 규칙: 함수명.클래스명

S3 동작 순서

summary(x)

1️⃣ class(x) 확인
2️⃣ summary.클래스명(x) 찾기
3️⃣ 있으면 실행
4️⃣ 없으면 summary.default(x)

➡ 이 과정을 메서드 디스패치라고 함

 

예제

숫자

x <- 1:5
class(x)        # "integer"
summary(x)

factor

f <- factor(c("A","B","A"))
class(f)        # "factor"
summary(f)

data.frame

df <- data.frame(a=1:3)
class(df)       # "data.frame"
summary(df)

 

 

 

 

typeof와의 관계

typeof(f)  # "integer"
class(f)   # "factor"

📌 저장 방식(type)은 integer
📌 행동(class)은 factor

 

행동을 바꾸는 시스템이 S3

 

S3의 특징

 

S3 객체 직접 만들기

print.myclass <- function(x) {
  cat("S3 객체입니다\n")
}

x <- 1:3
class(x) <- "myclass"
print(x)

print.myclass() 자동 실행

 

 

S3는 “객체가 어떤 class냐에 따라 함수가 선택되는 규칙”이다.