─━ IT ━─

Ruby로 배우는 디자인 패턴: 다양한 패턴의 실용적인 구현

DKel 2024. 11. 2. 18:54
반응형
디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 재사용 가능한 솔루션을 제공합니다. Ruby는 그 자체로 강력한 언어이지만, 디자인 패턴을 활용하면 더욱 유지 보수성과 확장성이 높은 코드를 작성할 수 있습니다. 이번 글에서는 Ruby로 몇 가지 주요 디자인 패턴을 구현하는 방법을 예시와 함께 자세히 알아보겠습니다.

 
### 싱글톤 패턴 (Singleton Pattern)
싱글톤 패턴은 특정 클래스에 대해 하나의 인스턴스만 존재하도록 보장하고, 그 인스턴스에 접근할 전역적인 방법을 제공합니다. Ruby에서는 `Singleton` 모듈을 활용하여 쉽게 구현할 수 있습니다.
 
```ruby
require 'singleton'
 
class DatabaseConnection
  include Singleton
  
  def connect
    puts "데이터베이스에 연결되었습니다."
  end
end
 
db1 = DatabaseConnection.instance
db1.connect
 
db2 = DatabaseConnection.instance
puts db1.equal?(db2)  # true
```
 
위 코드에서 `DatabaseConnection` 클래스는 싱글톤으로 구현되어, 모든 인스턴스가 동일한 객체를 참조합니다. 따라서 같은 `connect` 메서드를 호출하더라도 동일한 인스턴스를 사용합니다.
 
### 팩토리 패턴 (Factory Pattern)
팩토리 패턴은 객체를 생성할 때 생성 로직을 분리하여 클라이언트 코드가 결합되지 않도록 하는 디자인 패턴입니다. Ruby에서는 프로토타입이나 클래스 메서드를 사용하여 구현할 수 있습니다.
 
```ruby
class VehicleFactory
  def self.create_vehicle(type)
    case type
    when :car
      Car.new
    when :bike
      Bike.new
    else
      raise "알 수 없는 차량 타입입니다."
    end
  end
end
 
class Car
  def initialize
    puts "자동차가 생성되었습니다."
  end
end
 
class Bike
  def initialize
    puts "자전거가 생성되었습니다."
  end
end
 
vehicle1 = VehicleFactory.create_vehicle(:car)
vehicle2 = VehicleFactory.create_vehicle(:bike)
```
 
여기서 `VehicleFactory` 클래스는 `create_vehicle` 메서드를 통해 `Car`나 `Bike` 객체를 생성합니다. 이 방식은 객체 생성 로직을 중앙에서 관리할 수 있게 해주며, 새로운 차량 타입을 쉽게 추가할 수 있습니다.
 
### 옵저버 패턴 (Observer Pattern)
옵저버 패턴은 객체의 상태 변화를 관찰하고, 상태가 변경될 때 의존하는 객체들에게 자동으로 알림이 가는 디자인 패턴입니다. Ruby에서는 옵저버 패턴을 자체적인 `Observer` 모듈이나 콜백 메서드로 구현할 수 있습니다.
 
```ruby
class Publisher
  def initialize
    @subscribers = []
  end
  
  def subscribe(subscriber)
    @subscribers << subscriber
  end
  
  def notify(event)
    @subscribers.each { |subscriber| subscriber.update(event) }
  end
end
 
class Subscriber
  def update(event)
    puts "이벤트 수신: #{event}"
  end
end
 
publisher = Publisher.new
subscriber1 = Subscriber.new
subscriber2 = Subscriber.new
 
publisher.subscribe(subscriber1)
publisher.subscribe(subscriber2)
 
publisher.notify("새 글이 게시되었습니다.")
```
 
위 예제에서는 `Publisher` 클래스가 `subscriber`들을 관리하고, `notify` 메서드를 통해 이벤트를 알립니다. `Subscriber` 클래스는 `update` 메서드를 구현하여 이벤트를 처리합니다. 이를 통해 쉽게 다대다 관계를 관리할 수 있습니다.
 
이와 같이 각기 다른 디자인 패턴을 Ruby로 구현하면 코드의 유연성과 재사용성을 크게 향상시킬 수 있습니다. 디자인 패턴을 공부하고 실제 프로젝트에 적용해보면서 소프트웨어 설계 능력을 향상시켜 보세요.

반응형