학습
Ruby 클래스와 모듈
Ruby 클래스와 모듈 — 중급
클래스와 모듈
1. 도입 (왜 배워야 하는가)
클래스와 모듈은 루비(Ruby) 프로그래밍에서 객체 지향 프로그래밍의 핵심 요소입니다. 객체 지향 프로그래밍은 실제 세계의 사물이나 개념을 프로그램으로 모델링하는 데 도움을 줍니다. 이를 통해 코드의 재사용성, 유지보수성, 확장성을 높일 수 있습니다.
실무에서 객체 지향 프로그래밍을 사용하지 않으면 코드가 비효율적이고 복잡해져 유지보수가 어려워질 수 있습니다. 예를 들어, 쇼핑몰 시스템을 개발할 때 장바구니, 상품, 사용자 정보를 각각의 클래스로 나누지 않으면 코드가 중복되고, 변경 사항을 관리하기 어려워질 수 있습니다. 클래스와 모듈을 사용하여 잘 구조화된 코드를 작성하는 것은 필수적입니다.
2. 핵심 개념 설명
클래스
클래스는 객체를 생성하기 위한 청print입니다. 클래스는 속성(변수)과 행동(메소드)을 정의합니다. 예를 들어, 자동차라는 클래스를 정의하면 색상, 모델 등의 속성과 주행, 정지 등의 행동을 가질 수 있습니다.
모듈
모듈은 관련된 메소드와 상수의 집합으로, 여러 클래스에서 공유할 수 있는 기능을 제공합니다. 클래스와 달리 인스턴스화할 수는 없지만, 여러 클래스에서 공통적으로 사용해야 하는 기능을 정의할 때 유용합니다. 예를 들어, 여러 종류의 차량 클래스가 있을 때, '운전 가능'이라는 기능을 모듈로 정의해 공유할 수 있습니다.
| 용어 | 정의 |
|---|---|
| 클래스 | 객체를 만들기 위한 템플릿 |
| 모듈 | 여러 클래스에서 공유할 기능 집합 |
3. 기본 코드 예제
# 자동차 클래스를 정의합니다.
class Car
attr_accessor :color, :model
def initialize(color, model)
@color = color # 색상 속성
@model = model # 모델 속성
end
def drive
"운전 중입니다." # 주행 행동
end
end
# 자동차 객체를 생성합니다.
my_car = Car.new("빨강", "소나타")
puts my_car.color # 자동차의 색상 출력
puts my_car.drive # 자동차의 주행 행동 출력
실행 결과:
빨강
운전 중입니다.
class Car: 자동차 클래스를 정의합니다.attr_accessor :color, :model: 색상과 모델 속성을 생성합니다.initialize: 객체가 생성될 때 색상과 모델을 초기화합니다.def drive: 자동차가 운전 중이라는 메시지를 반환하는 메소드를 정의합니다.my_car = Car.new("빨강", "소나타"): 새로운 자동차 객체를 생성합니다.puts my_car.color: 자동차의 색상을 출력합니다.puts my_car.drive: 자동차의 주행 행동을 출력합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
쇼핑몰에서 장바구니를 구현할 때 클래스를 사용하여 개별 상품을 객체로 만들고, 장바구니 클래스를 통해 여러 상품을 관리합니다.
class Product
attr_accessor :name, :price
def initialize(name, price)
@name = name
@price = price
end
end
class Cart
def initialize
@items = [] # 장바구니 아이템 목록
end
def add_item(product)
@items << product # 상품을 장바구니에 추가
end
def total_price
@items.map(&:price).sum # 총 가격 계산
end
end
apple = Product.new("사과", 1000)
banana = Product.new("바나나", 1500)
cart = Cart.new
cart.add_item(apple)
cart.add_item(banana)
puts cart.total_price # 총 가격 출력
실행 결과:
2500
Product 클래스는 상품의 이름과 가격을 정의합니다.Cart 클래스는 장바구니에 상품을 추가하고 총 가격을 계산하는 메소드를 포함합니다.cart.add_item(apple) : 사과를 장바구니에 추가합니다.cart.total_price : 장바구니의 총 가격을 계산하여 출력합니다.예제 2: 사용자 관리 시스템
사용자 정보를 관리하는 시스템을 만들 때 클래스를 사용하여 각 사용자의 정보를 객체로 만들고, 모듈을 사용하여 공통 기능을 정의할 수 있습니다.
module Authenticatable
def authenticate(password)
@password == password # 비밀번호 인증 메소드
end
end
class User
include Authenticatable # 모듈 포함
attr_accessor :name, :password
def initialize(name, password)
@name = name
@password = password
end
end
user = User.new("홍길동", "mypassword")
puts user.authenticate("mypassword") # 인증 성공
실행 결과:
true
Authenticatable 모듈은 비밀번호를 인증하는 메소드를 포함합니다.User 클래스는 사용자의 이름과 비밀번호를 속성으로 가집니다.include Authenticatable : 사용자 클래스에 인증 기능을 추가합니다.user.authenticate("mypassword") : 비밀번호가 일치하는지 확인합니다.5. 흔한 실수와 주의사항
실수 1: 클래스와 모듈의 혼동
class MyModule
def hello
"안녕하세요"
end
end
MyModule을 클래스로 정의했지만 모듈로 사용하려고 했습니다.module MyModule
def hello
"안녕하세요"
end
end
실수 2: 인스턴스 변수 접근
class Dog
def initialize(name)
@name = name
end
def bark
puts name # 잘못된 접근
end
end
@를 빼먹었습니다.def bark
puts @name # 올바른 접근
end