"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 차량 예시와 재미있는 비유를 사용한 SOLID 원칙

차량 예시와 재미있는 비유를 사용한 SOLID 원칙

2024-11-06에 게시됨
검색:628

SOLID principles using some fun analogies with Vehicle Example

SOLID는 컴퓨터 프로그래밍의 다섯 가지 좋은 원칙(규칙) 그룹의 약어입니다. SOLID를 사용하면 프로그래머는 나중에 더 쉽게 이해하고 변경할 수 있는 코드를 작성할 수 있습니다. SOLID는 객체 지향 설계를 사용하는 시스템에서 자주 사용됩니다.
차량을 예로 들어 SOLID 원리를 설명하겠습니다. 운송 서비스를 위해 자동차, 전기 자동차 등 다양한 유형의 차량을 관리하는 시스템을 설계한다고 상상해 보세요.

S - 단일 책임 원칙(SRP)

차량 예: 자동차가 있다고 상상해 보세요. 운전을 담당하지만 자체 유지 관리(예: 오일 교환이나 타이어 교체)를 처리할 책임은 있어서는 안 됩니다. 대신 별도의 정비사가 이를 담당합니다.
설명: 우리 코드에서 Vehicle 클래스는 제조사 및 모델 저장과 같이 차량 자체와 관련된 작업만 처리해야 합니다. 유지 관리를 관리해야 하는 경우 이를 위해 별도의 유지 관리 클래스를 만듭니다. 이렇게 하면 각 클래스에 하나의 작업이나 책임이 있어 코드를 더 쉽게 관리할 수 있습니다.

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end
end

class Maintenance
  def initialize(vehicle)
    @vehicle = vehicle
  end

  def perform_maintenance
    puts "Performing maintenance on #{@vehicle.make} #{@vehicle.model}"
  end
end

O - 개방/폐쇄 원리(OCP)

차량 예: 기본 자동차가 있고 이제 시스템에 전기 자동차를 추가하려고 한다고 가정합니다. 전기차용 기능을 추가하기 위해 기존 자동차 클래스를 수정할 필요는 없습니다. 대신, 전기 자동차에 대한 새로운 클래스를 생성하여 기존 기능을 확장할 수 있습니다.
설명: Vehicle 클래스는 확장을 위해 열려 있지만(ElectricVehicle과 같은 새로운 유형의 차량을 생성할 수 있음) 수정을 위해 닫혀 있습니다(새 유형을 추가하기 위해 Vehicle 클래스 자체를 변경할 필요는 없습니다).

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def description
    "#{@make} #{@model}"
  end
end

class ElectricVehicle 





L - 리스코프 대체 원리(LSP)

차량 예: 다수의 차량이 있고 일반 자동차를 문제 없이 전기 자동차로 교체할 수 있다고 상상해 보세요. 둘 다 시스템을 손상시키지 않고 기본 기능인 '운전'을 수행할 수 있어야 합니다.
설명: 모든 하위 클래스(예: ElectricVehicle)는 프로그램의 동작을 변경하지 않고 상위 클래스(Vehicle)를 대체할 수 있어야 합니다. 이를 통해 우리 코드는 동일한 방식으로 다양한 유형의 차량을 처리할 수 있습니다.

class Vehicle
  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle 





I - 인터페이스 분리 원리(ISP)

차량 예: 다양한 유형의 차량이 있다고 상상해 보세요. 일부는 충전할 수 있고(예: 전기 자동차), 일부는 주행만 가능합니다(예: 휘발유 자동차). 휘발유 자동차가 충전 관련 방법을 처리하는 것을 원하지 않습니다.
설명: 클래스는 필요한 인터페이스(또는 동작)만 구현해야 합니다. 예를 들어 ElectricVehicle은 Drivable 및 Chargeable 인터페이스를 모두 구현할 수 있지만 일반 차량은 Drivable만 구현할 수 있습니다.

module Drivable
  def drive
    raise NotImplementedError, "This #{self.class} cannot drive"
  end
end

module Chargeable
  def charge
    raise NotImplementedError, "This #{self.class} cannot be charged"
  end
end

class Vehicle
  include Drivable

  def initialize(make, model)
    @make = make
    @model = model
  end

  def drive
    puts "Driving the #{@make} #{@model}"
  end
end

class ElectricVehicle 





D - 종속성 역전 원리(DIP)

차량 예: 자동차에 가스 엔진이나 전기 엔진 등 다양한 유형의 엔진이 있을 수 있다고 상상해 보세요. 자동차는 특정 엔진 유형에 직접적으로 의존하는 대신, 모든 유형의 엔진을 사용할 수 있도록 보다 일반적인 엔진 인터페이스에 의존해야 합니다.
설명: 높은 수준의 모듈(차량 등)은 낮은 수준의 모듈(GasEngine 또는 ElectricEngine 등)에 의존해서는 안 됩니다. 둘 다 추상화(예: 엔진 인터페이스)에 의존해야 합니다. 이를 통해 시스템이 더욱 유연해지고 변경이 쉬워집니다.

class Engine
  def start
    raise NotImplementedError, "This #{self.class} cannot start"
  end
end

class GasEngine 



이 차량 사례의 SOLID 원칙을 따르면 유지 관리, 확장 및 새로운 요구 사항에 적응하기 쉬운 시스템을 구축할 수 있습니다.

링크드인: https://www.linkedin.com/in/anandsoni11/

릴리스 선언문 이 기사는 https://dev.to/sonianand11/solid-principles-using-some-fun-analogies-with-vehicle-example-34p7?1에서 복제됩니다. 침해 사항이 있는 경우, [email protected]으로 문의하시기 바랍니다. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3