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냐에 따라 함수가 선택되는 규칙”이다.
'R프로그래밍' 카테고리의 다른 글
| 박스플롯(Boxplot)이란? (0) | 2026.02.11 |
|---|---|
| 자료형 확인 typeof(), class(), lapply() 비교 (0) | 2026.02.03 |
| iris 활용한 apply 계열 정리 (0) | 2026.02.03 |
| R기초 - list 개념 잡기 (0) | 2026.02.03 |
| R프로그래밍 핵심 함수 정리 (0) | 2026.02.03 |