ruby tutorial2 - Class
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 class
2 Ŭ·¡½º Á¤ÀÇ
2.1 Instance Variables
3 Accessor Methods
3.1 Ŭ·¡½º º¯¼ö
3.2 Class instance Variables
3.3 Ŭ·¡½º ¸Þ¼­µå
3.4 ÀνºÅϽº
4 Declaring Visibility
4.1 Private
4.2 public
4.3 protected
5 »ó¼Ó
5.1 ¸ðµâ »ç¿ëÇϱâ
5.2 Ruby Class Meta-Model

1 class

Ŭ·¡½º¿Í °´Ã¼ÁöÇâ¿¡ ´ëÇÑ ³»¿ëÀº ¸µÅ©¸¦ Âü°íÇϽðí¿ä. ¾ð¾î¸¦ ¸··ÐÇϰí Ŭ·¡½ºÀÇ »ç¾çÀº Å©°Ô ´Ù¸£Áö ¾ÊÀ¸¹Ç·Î, ´Ù¸¥ °´Á¦ ÁöÇâ¾ð¾î¸¦ ´Ù·é ÀûÀÌ ÀÖ´Ù¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù. ƯÈ÷ Java¿¡ Àͼ÷ÇÏ´Ù¸é ´õ ½±°Ô Ȱ¿ëÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù.

2 Ŭ·¡½º Á¤ÀÇ

·çºñ Ŭ·¡½º ºí·°Àº class¿Í end Ű¿öµå »çÀÌ¿¡ À§Ä¡ÇÕ´Ï´Ù. ƯÀÌÇÑ Á¡Àº Ŭ·¡½º À̸§ÀÇ Ã¹±ÛÀÚ´Â ¹Ýµå½Ã ´ë¹®ÀÚ¿©¾ß ÇÑ´Ù´Â °Ì´Ï´Ù. ¼Ò¹®ÀÚ¸é ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù. Ŭ·¡½º´Â º¸Åë ´ÙÀ½ÀÇ ±¸¼­¿ä¼Ò¸¦ °¡Áý´Ï´Ù.
  1. method
  2. class variable
  3. instance variable

°¡Àå °£´ÜÇÑ Å¬·¡½ºÀÇ Çü½ÄÀÔ´Ï´Ù.
class MyClass 
  def some_method 
  end 
end 
 

2.1 Instance Variables

ÀνºÅϽº º¯¼ö´Â Ŭ·¡½ºÀÇ ÀνºÅϽº¿¡¼­ »ç¿ëÇÏ´Â º¯¼öÀÔ´Ï´Ù. °´Ã¼ º¯¼ö ȤÀº ¸â¹ö º¯¼ö¶ó°í ºÎ¸¨´Ï´Ù. ÀϹÝÀûÀ¸·Î ¸â¹ö º¯¼ö·Î »ç¿ëÇØ ¿Ô´Âµ¥, Ruby´Â ÀνºÅϽº º¯¼ö¶õ ¿ë¾î¸¦ ¼±È£ÇÏ´Â °Í °°½À´Ï´Ù. ¿©±â¿¡¼­´Â ÀνºÅϽº º¯¼ö¶ó°í ºÎ¸¦ ÀÛÁ¤ÀÔ´Ï´Ù.

ÀνºÅϽº º¯¼ö´Â º¯¼ö À̸§ ¾Õ¿¡ @¸¦ ºÙÀÔ´Ï´Ù.
#!/usr/bin/ruby 
 
class MyClass 
  @one = 1 
  def do_something 
    @one = 2 
  end 
  def output 
    puts @one 
  end 
end 
 
instance = MyClass.new 
instance.output 
instance.do_something 
 

½ÇÇà°á°ú´Â ´ÙÀ½°ú °°½À´Ï´Ù.
nil 
2 
 
³× output °ªÀÌ nilÀÌ ³ª¿É´Ï´Ù. ¿Ö 1ÀÌ ¾Æ´ÏÁö¶ó°í »ý°¢ÇÒ ¼ö Àְڴµ¥¿ä. ÀνºÅϽº º¯¼ö´Â ÀνºÅϽº¿¡¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ¾ð¾î´Â Ŭ·¡½º¿¡¼­ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ¾øµµ·Ï ¸·°í ÀÖ½À´Ï´Ù. ¾Æ·¡ C++ Äڵ带 º¸ÁÒ
#include <iostream> 
 
class MyInfo 
{ 
    public: 
        int a = 1; 
        int b = 2; 
}; 
 
int main() 
{ 
    MyInfo m; 
    cout << m.a << endl; 
} 
 
ÀÌ ÄÚµå´Â ÄÄÆÄÀϽà ¿¡·¯¸¦ ¹ß»ýÇÕ´Ï´Ù.
instance.cpp:6:17: error: ISO C++ forbids initialization of member ¡®a¡¯ 
instance.cpp:6:17: error: making ¡®a¡¯ static 
instance.cpp:6:17: error: ISO C++ forbids in-class initialization of non-const static member ¡®a¡¯ 
instance.cpp:7:17: error: ISO C++ forbids initialization of member ¡®b¡¯ 
instance.cpp:7:17: error: making ¡®b¡¯ static 
instance.cpp:7:17: error: ISO C++ forbids in-class initialization of non-const static member ¡®b¡¯ 
 

Ruby´Â ¿¡·¯¸¦ ¹ß»ýÇÏÁö´Â ¾Ê´Âµ¥¿ä. ´ë½Å ±âº» °ªÀ¸·Î ÃʱâÈ­ µË´Ï´Ù. ±×·¡¼­ ±âº» °ªÀÎ nilÀÌ Ãâ·ÂµÈ°ÅÁÒ.

3 Accessor Methods

ÀνºÅϽº º¯¼ö´Â ¹Ù±ù¿¡¼­ Á÷Á¢ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. ¸Þ¼­µå¸¦ ÀÌ¿ëÇØ¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù. ¸¸¾à ¹Ù±ù¿¡¼­ Á÷Á¢ Á¢±ÙÇÏ°í ½Í´Ù¸é Accessor Methods¸¦ ¸¸µé¾î¼­ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
#!/usr/bin/ruby 
 
class MyClass 
  def initialize 
    @foo=28 
  end  
  def foo  
    return @foo 
  end  
end 
 
instance = MyClass.new 
puts instance.foo 
 
foo¸¦ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÀÐÀ» ¼ö¸¸ ÀÖ½À´Ï´Ù. ¸¸¾à °ªÀ» ¾²·Á°í ÇÏ¸é ¿¡·¯°¡ ¹ß»ýÇÒ°Ì´Ï´Ù.
instance = MyClass.new 
puts instance.foo 
instance.foo = 496 
 
foo¿¡ 496À» ÀúÀåÇÏ·Á°í ÇÏ¸é ´ÙÀ½°ú °°Àº ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµË´Ï´Ù.
./class.rb:18: undefined method `foo=' for #<MyClass:0xb76f98b8 @foo=28> (NoMethodError) 
 

ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀº µÎ °¡Áö Àä. Çϳª´Â ¾²±â Á¢±ÙÀÌ °¡´ÉÇÑ Accessor Methods¸¦ ¸¸µå´Â °Ì´Ï´Ù.
class MyClass 
  def initialize 
    @foo=28 
  end 
  def foo 
    return @foo 
  end 
 
  def foo=(value) 
    @foo = value 
  end 
end 
 
ÀÌ ¹æ½ÄÀº °£´ÜÇϱä ÇÕ´Ï´Ù¸¸ ÀνºÅϽº º¯¼ö°¡ Ãß°¡µÉ ¶§¸¶´Ù Á¢±ÙÀ» À§ÇÑ ¸Þ¼­µå Äڵ带 ¸¸µé¾îÁà¾ß ÇÑ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¹ø°Å·ÓÁÒ. ±×·¡¼­ attr_accessorÀ» ÀÌ¿ëÇØ¼­ Á¢±ÙÀÚ ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ´Â ÀÏÀ» ÀÚµ¿À¸·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù.
#!/usr/bin/ruby 
 
class MyClass 
  attr_accessor :foo 
  def initialize 
    @foo=28 
  end 
end 
 
instance = MyClass.new 
puts instance.foo 
instance.foo = 496 
puts instance.foo 
 
ÈξÀ °£´ÜÇØ Á³±º¿ä.

ÇÏÁö¸¸ Accessor ¸Þ¼­µå¸¦ »ç¿ëÇÒ °æ¿ì ¾òÀ» ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¸Þ¼­µåÀ̱⠶§¹®¿¡ ¾òÀ» ¼ö ÀÖ´Â ÀåÁ¡Àä. ÇÊ¿äÇÑ ¿¬»êÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÔ·Â °ªÀ» ¹Ý¿Ã¸² ÇØ¼­ ÀúÀåÇÏ´Â ÄÚµåÀÔ´Ï´Ù.
class MyClass 
  def initialize 
    @foo=28 
  end 
 
  def foo 
    return @foo 
  end 
 
  def foo=(value) 
    @foo = value.round 
  end 
end 
 
instance = MyClass.new 
puts instance.foo 
instance.foo = 496.6 
puts instance.foo 
 

3.1 Ŭ·¡½º º¯¼ö

Ŭ·¡½º º¯¼ö´Â À̸§¾Õ¿¡ @@¿¬»êÀÚ¸¦ ºÙ¿©¼­ ¸¸µì´Ï´Ù. ÀÌ º¯¼ö´Â ¸ðµç Ŭ·¡½º ÀνºÅϽº¿¡¼­ ÇÔ²² »ç¿ëÇϴµ¥¿ä. C++À̳ª JavaÀÇ static º¯¼ö¿Í ºñ½ÁÇÏ´Ù°í º¸½Ã¸é µË´Ï´Ù.
#!/usr/bin/ruby 
 
class MyClass 
  @@value =1 
  def add_one 
    @@value = @@value +1 
  end 
 
  def value 
    @@value 
  end 
end 
 
instanceOne = MyClass.new 
instanceTwo = MyClass.new 
puts instanceOne.value 
 
instanceOne.add_one 
puts instanceOne.value 
puts instanceTwo.value 
 
Ãâ·Â °ªÀÔ´Ï´Ù.
1 
2 
2 
 

3.2 Class instance Variables

ÀÌ°Ç Á» »ìÆìºÁ¾ß ÇÒ °Í °°½À´Ï´Ù. ¾Ëµí ¾Ëµí Çϸ鼭 ¸íÈ®ÇÏÁö°¡ ¾Ê¾Æ¼­¿ä.

3.3 Ŭ·¡½º ¸Þ¼­µå

Ŭ·¡½º ¸Þ¼­µå¿Í ÀϹÝÀûÀÎ ¸Þ¼­µå¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î ¼±¾ðÇÕ´Ï´Ù. self°¡ ºÙ´Â °ÍÀ¸·Î ÀÌ µÑÀ» ±¸ºÐÇÕ´Ï´Ù. Ŭ·¡½º ¸Þ¼­µå´Â Ŭ·¡½º ÀνºÅϽº¸¦ ¸¸µéÁö ¾Ê°íµµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. c++ÀÇ static ¸Þ¼­µå¿Í ºñ½ÁÇÕ´Ï´Ù. static ¸Þ¼­µå¿Í ¸¶Âù°¡Áö·Î Ŭ·¡½º º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
class MyClass 
  def self.some_method 
    puts 'something' 
  end 
end 
MyClass.some_method 
 

3.4 ÀνºÅϽº

ÀνºÅϽº´Â Ŭ·¡½º·Î ºÎÅÍ ¸¸µå´Â °´Ã¼·Î, ÀνºÅϽº°¡ ¸¸µé¾îÁö´Â °úÁ¤À» instantiation'À̶ó°í ÇÕ´Ï´Ù. ·çºñ´Â ¾Æ·¡¿Í °°ÀÌ ÀνºÅϽº¸¦ ¸¸µì´Ï´Ù.


anObject = MyClass.new(parameters) 
 

Ŭ·¡½º´Â ÀνºÅϽº¸¦ »ý¼ºÇÒ ¶§ ÀÚµ¿À¸·Î ½ÇÇàµÉ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö Àִµ¥¿ä, ÀÌ ÇÔ¼öÀÇ À̸§ÀÌ initializeÀÔ´Ï´Ù. C++ÀÇ »ý¼ºÀÚ¿Í ºñ½ÁÇÏÁÒ. »ý¼ºÀÚ¿Í ¸¶Âù°¡Áö·Î ¸Å°³ º¯¼ö¸¦ °¡Áú ¼ö ÀÖ½À´Ï´Ù.
class MyClass 
  def initialize(parameters) 
  end 
end 
 

4 Declaring Visibility

·çºñ ¸Þ¼­µåµéÀº C++, Java¿Í °°Àº ¾ð¾î¿Í ¸¶Âù°¡Áö·Î public, private, protected 3°³ÀÇ visibility ¸ðµå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. hidden ¹æ½ÄÀ̶ó°í º¸¸é µÉ °Í °°Àºµ¥¿ä. hiddenÀº °´Ã¼ÁöÇâÀÇ ´ëÇ¥ÀûÀΠƯ¡ÀÌÁÒ. hidden ¼Ó¼ºÀ» Á¶ÀýÇÔÀ¸·Î¼­, °´Ã¼´Â ¼Ó¼º°ú ¸Þ¼­µå¸¦ ¾ÈÀüÇÏ°Ô ¿î¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

4.1 Private

private´Â ¸Þ¼­µå¿Í º¯¼ö¿¡ hidden ¼Ó¼ºÀ» ºÎ¿©ÇÑ´Ù°í º¸½Ã¸é µË´Ï´Ù. ¿ÜºÎ¿¡¼­ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. private·Î ¼±¾ðµÈ º¯¼ö´Â ¸Þ¼­µå¸¦ ÅëÇØ¼­¸¸ °£Á¢ÀûÀ¸·Î Á¦¾î°¡ °¡´ÉÇÕ´Ï´Ù.

ÀÚµ¿Â÷¶ó´Â °´Ã¼°¡ ÀÖ´Ù°í °¡Á¤ÇØ º¾½Ã´Ù. ÀÚµ¿Â÷´Â ¼Óµµ¶ó´Â ¼Ó¼ºÀ» °¡Áö°í ÀÖÀ» °Çµ¥¿ä. ÀÌ°É ¿ÜºÎ¿¡¼­ Á÷Á¢ Á¢±ÙÇϵµ·Ï ÇÏ¸é ¾ÈµÇ°ÚÁÒ. ³í¸®ÀûÀ¸·Îµµ ¸ÂÁö ¾Ê½À´Ï´Ù. ¼Óµµ´Â ¿¢¼¿·¹ÀÌÅÍ¿Í ºê·¹ÀÌÅ©¸¦ ÅëÇØ¼­¸¸ Á¢±ÙÇØ¾ß °ÚÁÒ. Ŭ·¡½º¶ó¸é ¿¢¼¿ ¸Þ¼­µå¿Í ºê·¹ÀÌµå ¸Þ¼­µå¸¦ ÀÌ¿ëÇØ¼­ Á¢±ÙÇϵµ·Ï ÇØ¾ß ÇÏÁÒ. ¼Óµµ´Â private·Î ¼û°Ü¾ß ÇÏ´Â ¼Ó¼ºÀÎ °ÅÁÒ.

·çºñ¿¡¼­ÀÇ privateµµ °°Àº ¸ñÀûÀ¸·Î »ç¿ëÇÕ´Ï´Ù. ¸Þ¼­µå¿Í º¯¼ö¸¦ ¼û±â±â À§Çؼ­ »ç¿ëÇÕ´Ï´Ù. private·Î ¼±¾ðÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
  class Example 
    def methodA 
    end 
  
    private # ¾Æ·¡ÀÇ ¸ðµç ¸Þ¼­µåµéÀº private ÀÔ´Ï´Ù.  
  
    def methodP 
    end 
  end 
 
private Ű¿öµå¸¦ ´Üµ¶À¸·Î »ç¿ëÇÒ °æ¿ì ¾Æ·¡ÀÇ ¸ðµç ¸Þ¼­µåµéÀº private°¡ µË´Ï´Ù. ¼±ÅÃÀûÀ¸·Î Àû¿ëÇÏ°í ½Í´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µË´Ï´Ù.
  class Example 
    def methodA 
    end 
  
    def methodP 
    end 
  
    private :methodP 
  end 
 
methodP¸¦ private ¼Ó¼ºÀ¸·Î ¼±¾ðÇß½À´Ï´Ù.

Ŭ·¡½º ¸Þ¼­µåÀÇ °æ¿ì¿¡´Â private_class_method¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ƯÀÌÇÑ °ÍÀº new ¸Þ¼­µåµµ private·Î ¼±¾ðÇÒ ¼ö ÀÖ´Ù´Â °Çµ¥¿ä. ÁÖ·Î singleton Ŭ·¡½º¸¦ ¸¸µé±â À§Çؼ­ »ç¿ëÇÕ´Ï´Ù. new¸¦ »ç¿ëÇÏ´Â ´ë½Å »ç¿ëÀÚ Á¤ÀÇ ¸Þ¼­µå¸¦ »ç¿ëÇϵµ·Ï °­Á¦ÇÏ´Â ½ÄÀÌÁÒ. new°¡ ¼û°ÜÁö¹Ç·Î ¿À·ù¸¦ ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

#!/usr/bin/ruby 
 
class SingletonLike 
  private_class_method :new 
  @num  
  @@inst = nil  
  def initialize 
    @num = 0  
  end  
  def SingletonLike.create 
    @@inst = new unless @@inst 
    return @@inst 
  end  
  def add_one 
    @num = @num+1 
    return @num; 
  end  
end 
 
args = "1"  
block = nil  
mySingle1 = SingletonLike 
mySingle2 = SingletonLike 
puts mySingle1.create.add_one 
puts mySingle2.create.add_one 
 

4.2 public

public´Â ±âº» hidden ¼Ó¼ºÀÔ´Ï´Ù. ÀÚÀ¯·Ó°Ô Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.


4.3 protected

C++À̳ª JavaÀÇ protected¿Í ´Ù¸£Áö ¾Ê½À´Ï´Ù. ÀڽŰú ¼­ºêŬ·¡½ºµéÀÌ Á¢±ÙÇÒ ¼ö ÀÖÀ¸¸ç, ¿ÜºÎ¿¡¼­´Â Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ°Ç Á» ÀڷḦ ´õ ã¾Æº¸°í Á¤¸®ÇØ¾ß ÇÒµí

5 »ó¼Ó

Ŭ·¡½º´Â ½´ÆÛ Ŭ·¡½º (ºÎ¸ð Ŭ·¡½º ȤÀº º£À̽º Ŭ·¡½º¶ó°íµµ ÇÑ´Ù.)·ÎºÎÅÍ ¸Þ¼­µå¿Í º¯¼ö¸¦ »ó¼Ó¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ·çºñ´Â ´ÙÁß »ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ´ÜÁö ÇϳªÀÇ ½´ÆÛ Ŭ·¡½º¸¸ °¡Áú ¼ö ÀÖ½À´Ï´Ù.
#!/usr/bin/ruby 
 
class Car 
  def transport_class 
    puts 'Car' 
  end 
end 
 
class Bus < Car 
  def sub_class 
    puts 'Bus' 
  end 
end 
 
myCar = Bus.new 
myCar.transport_class 
myCar.sub_class 
 
Ãâ·Â :
Car 
Bus 
 

private ¼Ó¼ºÀÇ º¯¼ö¿Í ¸Þ¼­µå°¡ ¾Æ´Ï¶ó¸é ½´ÆÛ Ŭ·¡½º·ÎºÎÅÍ ÀÚ½Ä Å¬·¡½º·Î »ó¼Ó °¡´ÉÇÕ´Ï´Ù.

ºÎ¸ð Ŭ·¡½ºÀÇ ¸Þ¼­µå´Â ¿À¹ö¶óÀ̵åÇÒ ¼ö Àִµ¥¿ä. super Ű¿öµå¸¦ ÀÌ¿ëÇØ¼­ ¿©Àü½Ã ºÎ¸ðŬ Ŭ·¡½ºÀÇ ¸Þ¼­µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
#!/usr/bin/ruby 
 
class Car 
  def iniitialize 
  end 
  def transport_class 
    puts 'Car' 
  end 
end 
 
class Bus < Car 
  def sub_class 
    puts 'Bus' 
  end 
  def transport_class 
    super 
    puts "This is My Car Class" 
  end 
end 
 
Bus.new.transport_class 
 
Ãâ·Â
Car 
This is My Car Class 
 

ºÎ¸ð Ŭ·¡½ºÀÇ ¸Þ¼­µå¿¡ ´ëÇØ¼­ alias¸¦ ÁÙ ¼ö Àִµ¥, ÀÌ ±â´ÉÀ» ÀÌ¿ëÇÏ¸é »ó¼Ó ¸Þ¼­µå¸¦ Á» ´õ ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
#!/usr/bin/ruby 
 
class Car 
  def iniitialize 
  end 
  def transport_class 
    "Car" 
  end 
end 
 
class Bus < Car 
  alias xCar transport_class 
  def sub_class 
    puts 'Bus' 
  end 
  def transport_class 
    print xCar, " : This is My Bus\n" 
  end 
end 
 
Bus.new.transport_class 
 
Ãâ·Â
Car : This is My Bus 
 

5.1 ¸ðµâ »ç¿ëÇϱâ

¸ðµâÀº Ŭ·¡½º¿Í ¸¶Âù°¡Áö·Î ¸Þ¼­µå, ´Ù¸¥ ¸ðµâ, Ŭ·¡½º¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ Ŭ·¡½º´Â ¾Æ´Õ´Ï´Ù. µû¶ó¼­ ÀνºÅϽº¸¦ ¸¸µé°Å³ª ÇÒ ¼ö´Â ¾ø½À´Ï´Ù. C++ÀÇ namespace¿Í ºñ½ÁÇÏ´Ù°í º¸¸é µÉ °Í °°Àºµ¥¿ä.
  1. namespace : »õ·Î Á¤ÀÇÇÑ ¸Þ¼­µå À̸§ÀÌ ´Ù¸¥ °÷¿¡¼­ Á¤ÀÇÇÑ ¸Þ¼­µå¿Í Ãæµ¹ÇÏÁö ¾Ê°Ô ÇÑ´Ù.
  2. Ŭ·¡½º »çÀÌ¿¡ ±â´É °øÀ¯ : Ŭ·¡½º¿Í ¸ðµâÀ» ÇÔ²² (Mix in)»ç¿ëÇϸé, ¸¶Ä¡ Ŭ·¡½º¿¡¼­ Á¤ÀÇÇÑ °Í ó·³ ¸ðµâÀÇ ¸Þ¼­µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. »ó¼ÓÀ» ÇÏÁö ¾Ê°íµµ ¸ðµâÀÇ ±â´ÉÀ» °øÀ¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.

module A 
  def a1 
    puts 'a1 is called' 
  end 
end 
  
module B 
  def b1 
    puts 'b1 is called' 
  end 
end 
  
module C 
  def c1 
    puts 'c1 is called' 
  end 
end 
  
class Test 
  include A 
  include B 
  include C 
  
  def display 
    puts 'Modules are included' 
  end 
end 
  
object=Test.new 
object.display 
object.a1 
object.b1 
object.c1 
 
Ãâ·Â
Modules are include 
a1 called 
b1 called 
c1 called 
 

5.2 Ruby Class Meta-Model


ÀÛ¼ºÀÏ : 2011³â 8¿ù 5ÀÏ Âë.

category_Ruby
category__420

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.