잊지 않겠습니다.

Class
  • 생성자 : initialize() 함수가 생성자로 만들어진다.
  • 모든  Class들은 열려져있는 상태를 유지하게 된다. 이미 정의된 CLass에서라도 언제든 원하는 메서드를 추가하는 것이 가능하다.
    • 같은 method를 다시 선언해서 치환하는 것이 가능하다.
  • super
    • 부모 Class에서의 선언되어있는 모든 것들을 의미한다.
    • Kasaoke < Song 의 경우에,  to_s의 부모 선언부를 알아보기 위해서는 다음과 같이 사용하면 된다.
    • 각 객체의 super class 를 순차적으로 찾아가면서 찾게 된다.
 class KaraokeSong < Song
    def to_s
        super + " [#@lyrics]"
    end
 end

Instance와 Property

C#에서의  property와  같은 접근법을 제공한다.(C# 3.0에서는 오히려 Ruby와 동일한 Class의 생성법들을 제공하고 있다.)

class Song
    attr_reader :name, :artisit, :duration
    attr_writer :name, :artist, :duration
end

위와 같은 코드에서는 자동적으로 @name, @artist, @duration과  Song.name, Song.artist, Song.duration의  읽고 쓰기가 가능한 Property가 생성이 된다.

Method와 속성과의 차이

: C#에서도 같은 이야기가 나온적이 있었고, 무언지 좋은지 나쁜지에 대한 토론이 자주 있었던것 같다. 그렇지만, 이에 대해서 확실한 것은 code의 가독성이라는 것에 대한 차이는 상당히 크다고 생각이 된다. 여러가지 코드를 볼때 언제나 값을 넣을 때, set, get의 Method만을 호출하는 것과, 자신의 Class의 값에 대해서는 Property를 이용해서 값을 넣고, 무언가 다른 class나 다른 resource에 값을 설정하고 저장할 때, 그에 대한 내용으로 set, get을 이용하는 것이 좀더 나은 방법으로 생각된다.

Class Variable & Class Method

:  생성된 모든 Class에서는 모두 instance를 가지게 된다.  Ruby에서 제공되는 Class Variable과 Class Method는 일반적으로 제공되는 Static Method와 Static Variable과 동일하게 생각하면 된다.


Class Variable

: '@@'로 정의된 변수를 의미한다. 모든 Class에서 공용으로 사용하게 된다.

Class Method

: 선언부로 instance메서드와 구분된다.

class Example
    def instance_method
    end
    def Example.class_method
    end
end
Singleton과 다른 생성자들

다음과 같은 코드를 이용해서 생성자로 생성을 못하고, 자신의 다른 생성자를 이용해서 instance를 생성시키는 것이 가능하다.

class MyLogger
    private_class_method :new
    @@logger = nil
    def MyLogger.create
        @@logger = new unless @@logger
        @@logger
    end
end
Class의 접근 제어 방법

Ruby에서는 모든 함수의 접근 제어 방법이 기본적으로 "public"으로 선언된다.

함수의 앞부분에 public, protected, private로 지정이 가능하다.

Class의 모든 단계에서 선언도 가능하다.

class MyClass
    public : method1, method4
    protected : method2
    private : method3

Posted by Y2K
,