블로그 보관함

2011년 7월 6일 수요일

R 객체 지향 프로그래밍: S4 기초

R OOP S4 기초

먼저 S3에 대해서는 여기 참조. S4 클래스로 프로그래밍을 하기 위해서 기본적으로 다음 함수들을 시용해야 한다.

  • setClass()
  • new()
  • setGeneric()
  • setMethod()

클래스

새로운 클래스는 다음처럼 setClass() 함수를 이용하여 정의한다.

setClass("circle", 
  representation(x="numeric", y="numeric", r="numeric"))
이제 new()를 이용하여 인스턴스를 만들 수 있다. 객체의 속성을 S4에서늘 슬롯(slot)이라고 한다. 슬롯은 object@slot 형태로 접근할 수 있다.
> a <- new("circle", x=5, y=10, r=4)
> str(a)
Formal class 'circle' [package ".GlobalEnv"] with 3 slots
  ..@ x: num 5
  ..@ y: num 10
  ..@ r: num 4
> a@x
[1] 5
> a@y
[1] 10
> a@r
[1] 4
한 객체가 특정 클래스에 속하는지 체크할 때는 is()를 이용한다.
> is(a, "circle")
[1] TRUE

메소드

메소드는 setMethod()를 이용하여 정의한다. 기존의 정의된 generic function이 없다면 우선 generic function부터 만들어야 하는데 이때에는 setGeneric()을 이용한다. 예를 들면 다음처럼 한다.

setGeneric("area", function(object) standardGeneric("area"))

setMethod("area", "circle",
          function(object) pi * object@r^2
          )
이제 메소드를 사용해 보면
> area(a)
[1] 50.26548
> area(new("circle", x=3, y=4, r=3))
[1] 28.27433

한 generic function에 어떤 method들이 있는지 알고 싶을 때는 showMethods()를 이용한다.

> showMethods("area")
Function: area (package .GlobalEnv)
object="circle"

참조

댓글 없음:

댓글 쓰기