클래스는 객체를 만들기위해 만들고, 모듈은 클래스에 메소드를 제공하기 위해 만든다.
클래스는 말그대로 객체생성을 위해 만드는거고, 모듈은 클래스에서 사용할 기능들을 제공하기 위해 만든다고 생각하면 쉽다.
클래스(객체) | 모듈(기능. 사용가능한 메서드를 제공하는 라이브러리 개념) | |
인스턴스화 | 가능 | 불가능 |
용도 | 객체생성 | 믹스인. namespace |
super class | module | object |
메소드 | 클래스메소드 & 인스턴스 메소드 | 모듈 메소드 & 인스턴스 메소드 |
상속 | 가능 | 불가능 |
include | 불가능 | 다른 클래스나 모듈에서 include가능 |
extend | 불가능 | 가능 |
+ include와 extend의 차이
module Foo
def foo
puts 'heyyyyoooo!'
end
end
# include : 모듈메서드를 인스턴스 메서드로 상속받게 됨
class Bar
include Foo
end
Bar.new.foo # heyyyyoooo!
Bar.foo # NoMethodError: undefined method ‘foo’ for Bar:Class
# extend : 모듈메서드를 클래스 메서드로 상속받게 됨
class Baz
extend Foo
end
Baz.foo # heyyyyoooo!
Baz.new.foo # NoMethodError: undefined method ‘foo’ for #<Baz:0x1e708>
'Web development > Ruby' 카테고리의 다른 글
[Ruby] Block vs Proc vs Lambda (0) | 2019.06.18 |
---|---|
[Ruby] and vs && (or vs ||) (0) | 2019.06.18 |
[Ruby] ||= (or equals)란 무엇인가? (0) | 2019.06.18 |
[Ruby] 함수를 동적으로 실행하기 (0) | 2019.06.18 |
[Ruby] 인스턴스 변수 (0) | 2019.06.18 |
댓글