일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 우분투
- ubuntu
- docker registry
- AWS
- port
- opsworks
- Openswan
- 드라이버
- ssh command
- sudo
- golang
- Linux
- docker container
- 리눅스
- ssh
- driver
- QT
- VMware
- 루비
- VIM
- RUBY
- 도커
- VPN
- docker
- Chef
- 방화벽체크
- DevOps
- docker-compose
- window size
- 패키지
- Today
- Total
구리의 창고
Ruby - module 그리고 include, extend 설명 본문
소개
Ruby에는 Mixin 구현을 위한 module이란 기능이 있다. 코드를 재활용하거나 큰 코드를 나눠서 구현해 여기 저기에서 필요한 코드를 가져올 때 유용하다. 일반적으로 class에 include 혹은 extend 해서 사용하게 되는데, 어떤 경우에 class method와 instance method가 되는지 코드를 통해 정리해보려고한다.
include
class Bar에 module Foo를 include하면 instance method foo가 된다.
module Foo
def foo
puts "method foo"
end
end
class Bar
include Foo
end
Bar.new.foo # method foo
Bar.foo # undefined method
extend
class Bar에 module Foo를 extend하면 class method foo가 된다.
module Foo
def foo
puts "method foo"
end
end
class Bar
extend Foo
end
Bar.foo # foo
Bar.new.foo # undefined method
self in module
보통 class method를 만들기 위해서 self를 사용한다. module 내에서 self를 이용해 method를 선언하고 include 혹은 extend를 하면 class method가 될 것 같지만 그렇게 동작하지 않는다. module method 선언 부에서 사용되는 self는 module자체의 self일 뿐이다. 아래 코드를 보자.
module Foo
def self.foo
puts "method foo"
end
end
class Bar
include Foo
end
class Baz
extend Foo
end
Foo.foo # method foo
Bar.foo # undefined method
Baz.foo # undefined method
module 내에 class method를 선언하고 싶으면 아래와 같은 방식으로 선언 할 수 있다.
module Foo
module ClassMethods
def bar
puts 'method bar'
end
end
def self.included(base)
base.extend(ClassMethods)
end
def foo
puts 'method foo'
end
end
class Baz
include Foo
end
Baz.new.foo # method foo
Baz.bar # method bar
Baz.foo # undefined method
Baz.new.bar # undefined method
'Ruby' 카테고리의 다른 글
RVM is not a function, selecting rubies with 'rvm use …' will not work (0) | 2017.07.06 |
---|---|
Rails4 + MySQL 타임존 설정하기 (0) | 2013.10.23 |
CentOS 6.4에 Ruby 1.9이상 설치하기 (0) | 2013.10.18 |
DataMapper - belongs_to 와 has 1 사용하기 (0) | 2012.06.21 |
Reque - Ruby에서 큐 사용하기 (0) | 2012.06.18 |
Comments