Ruby에서 모듈과 믹스인을 사용하는 방법에 대해 알아보도록 하겠습니다. 모듈은 Ruby에서 재사용 가능한 코드를 구성하고, 믹스인은 모듈을 클래스에 포함시켜 그 기능을 추가하는 방법입니다.
1. 모듈
Ruby에서 모듈은 module 키워드를 사용하여 정의하며, 메서드, 상수, 클래스를 포함할 수 있으며, 다른 클래스에서 재사용할 수 있습니다.
module Greeting
def hello
puts "Hello!"
end
def goodbye
puts "Good Bye!"
end
end
2. 믹스인으로 모듈 사용하기
include 또는 extend 키워드를 사용하여 모듈을 클래스에 믹스인할 수 있습니다. include는 인스턴스 메서드로, extend는 클래스 메서드로 추가합니다. 먼저 include를 사용한 믹스인은 다음과 같습니다.
module Greeting
def hello
puts "Hello!"
end
def goodbye
puts "Good Bye!"
end
end
class User
include Greeting
end
user = User.new
user.hello
user.goodbye
위 예제에서 User 클래스는 Greeting 모듈을 포함하였기에 hello와 goodbye 메서드를 사용할 수 있습니다. extend를 사용한 믹스인은 다음과 같습니다.
module Greeting
def hello
puts "Hello!"
end
def goodbye
puts "Good Bye!"
end
end
class Admin
extend Greeting
end
Admin.hello # 출력: Hello!
Admin.goodbye # 출력: Good Bye!
extend를 사용하면 클래스 메서드로 모듈의 메서드를 사용할 수 있습니다. Admin 클래스에 Greeting 모듈을 확장해 클래스를 통해 직접 메서드를 호출할 수 있습니다.
3. 모듈의 상수 사용
모듈 내 정의한 상수도 사용할 수 있습니다.
module MathConstants
PI = 3.14
end
puts MathConstants::PI # result: 3.14
4. 믹스인과 다중 상속
Ruby는 다중 상속을 지원하지 않지만, 모듈을 사용하여 비슷한 기능을 구현할 수 있습니다. 여러 모듈을 포함하여 다양한 기능을 조합할 수 있습니다.
module Flyable
def fly
puts "I'm flying!"
end
end
module Drive
def drive
puts "I'm Drive!"
end
end
class Move
include Flyable
include Drive
end
move = Move.new
move.fly # result: I'm flying!
move.drive # result: I'm Drive!
5. 믹스인에서 메서드 오버라이드
모듈에서 정의한 메서드는 클래스를 통해 오버라이드할 수 있습니다.
module Ruby
def hello
puts 'Hello Ruby Module!'
end
end
class User
include Ruby
def hello
puts 'Hello Ruby the User Module'
end
end
user = User.new
user.hello # result: Hello Ruby the User Module
GitHub - set-up-init/ruby-tutorial-tistory: https://thinky.tistory.com/category/Back-End/Ruby
https://thinky.tistory.com/category/Back-End/Ruby. Contribute to set-up-init/ruby-tutorial-tistory development by creating an account on GitHub.
github.com
'Back-End > Ruby' 카테고리의 다른 글
[Ruby] 8장 예외처리 (0) | 2025.03.12 |
---|---|
[Ruby] 7장 파일 입출력 (0) | 2025.03.08 |
[Ruby] 5장 클래스와 객체 지향 프로그래밍 (0) | 2025.03.01 |
[Ruby] 4장 함수 및 메서드 (0) | 2025.02.26 |
[Ruby] 3장 Ruby의 제어흐름 (0) | 2025.02.24 |