#!/usr/bin/ruby

# 모듈

module MyModule
  def my_method
  end
end

module MyModule # 같은 이름으로 여러 번 정의해도 하나의 모듈로 통합됩니다.
  alias aliased_method my_method
end

module MyModule
  remove_method :my_method
end


module OuterModule
  module InnerModule
    # 중첩도 됩니다.
  end
end

module OuterModule::InnerModule::GrandsonModule
  # 상위 모듈이 이미 정의되어 있는 경우에는, 이렇게 정의할 수도 있습니다.
end



# 클래스

class MyClass
  # 클래스입니다.
end

class AnotherClass < MyClass
  # MyClass를 상속하는 클래스입니다. 부모 클래스를 지정하지 않으면, 기본적으로 Object를 상속합니다.
  # 뭔가 새로운 상속 구조를 만들려면, BasicObject를 상속합니다.
end


## 상속

class A
  def value
    @value
  end
  def value=(value)
    @value = value
  end
end

class B < A
  def value
    # super는 부모 클래스의 메서드에 현재 메서드의 매개변수를 전달해서 호출합니다.
    # 전달할 매개변수 값을 지정하려면 super(1)와 같이 사용합니다.
    1 + super
  end
end

c = B.new
c.value = 1
puts c.value



## 싱글턴 패턴

class S
  class << self
    # ...
  end
end




END{
  # https://ruby-doc.org/3.2.2/syntax/modules_and_classes_rdoc.html
}
