SOLID는 컴퓨터 프로그래밍의 5가지 좋은 원칙(규칙) 그룹을 의미하는 약어입니다. SOLID를 사용하면 프로그래머는 나중에 더 쉽게 이해하고 변경할 수 있는 코드를 작성할 수 있습니다. SOLID는 객체 지향 설계를 사용하는 시스템에서 자주 사용됩니다.
차량을 예로 들어 SOLID 원리를 설명하겠습니다. 운송 서비스를 위해 자동차, 전기 자동차 등 다양한 유형의 차량을 관리하는 시스템을 설계한다고 상상해 보세요.
차량 예: 자동차가 있다고 상상해 보세요. 운전을 담당하지만 자체 유지 관리(예: 오일 교환이나 타이어 교체)를 처리할 책임은 있어서는 안 됩니다. 대신 별도의 정비사가 이를 담당합니다.
설명: 우리 코드에서 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
차량 예시: 기본 자동차가 있는데 이제 시스템에 전기 자동차를 추가하고 싶다고 가정해 보겠습니다. 전기차용 기능을 추가하기 위해 기존 자동차 클래스를 수정할 필요는 없습니다. 대신, 새로운 전기 자동차 클래스를 생성하여 기존 기능을 확장할 수 있습니다.
설명: Vehicle 클래스는 확장을 위해 열려 있지만(ElectricVehicle과 같은 새로운 유형의 차량을 생성할 수 있음) 수정을 위해 닫혀 있습니다(새 유형을 추가하기 위해 Vehicle 클래스 자체를 변경할 필요는 없습니다).
class Vehicle def initialize(make, model) @make = make @model = model end def description "#{@make} #{@model}" end end class ElectricVehicle < Vehicle def initialize(make, model, battery_range) super(make, model) @battery_range = battery_range end def description "#{super} with #{@battery_range} miles battery range" end end
차량 예: 다수의 차량이 있고 일반 자동차를 문제 없이 전기 자동차로 교체할 수 있다고 상상해 보세요. 둘 다 시스템을 손상시키지 않고 기본 기능인 운전 - 을 수행할 수 있어야 합니다.
설명: 모든 하위 클래스(예: ElectricVehicle)는 프로그램 동작을 변경하지 않고 상위 클래스(Vehicle)를 대체할 수 있어야 합니다. 이를 통해 우리 코드는 동일한 방식으로 다양한 유형의 차량을 처리할 수 있습니다.
class Vehicle def initialize(make, model) @make = make @model = model end def drive puts "Driving the #{@make} #{@model}" end end class ElectricVehicle < Vehicle def drive puts "Driving the electric #{@make} #{@model} quietly" end end def test_drive(vehicle) vehicle.drive end car = Vehicle.new("Toyota", "Corolla") ev = ElectricVehicle.new("Tesla", "Model 3") test_drive(car) # Driving the Toyota Corolla test_drive(ev) # Driving the electric Tesla Model 3 quietly
차량 예: 다양한 유형의 차량이 있다고 상상해 보세요. 일부는 충전이 가능하고(예: 전기 자동차), 일부는 주행만 가능합니다(예: 휘발유 자동차). 휘발유 자동차가 충전 관련 방법을 처리하는 것을 원하지 않습니다.
설명: 클래스는 필요한 인터페이스(또는 동작)만 구현해야 합니다. 예를 들어 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 < Vehicle include Chargeable def initialize(make, model, battery_range) super(make, model) @battery_range = battery_range end def drive puts "Driving the electric #{@make} #{@model} quietly" end def charge puts "Charging the #{@make} #{@model}" end end
차량 예: 자동차에 가스 엔진이나 전기 엔진 등 다양한 유형의 엔진이 있을 수 있다고 상상해 보세요. 자동차는 특정 엔진 유형에 직접 의존하기보다는 보다 일반적인 엔진 인터페이스에 의존하여 모든 유형의 엔진을 사용할 수 있어야 합니다.
설명: 높은 수준의 모듈(예: 차량)은 낮은 수준의 모듈(예: GasEngine 또는 ElectricEngine)에 의존해서는 안 됩니다. 둘 다 추상화(예: 엔진 인터페이스)에 의존해야 합니다. 이를 통해 시스템이 더욱 유연해지고 변경이 쉬워집니다.
class Engine def start raise NotImplementedError, "This #{self.class} cannot start" end end class GasEngine < Engine def start puts "Starting gas engine" end end class ElectricEngine < Engine def start puts "Starting electric engine" end end class Vehicle def initialize(engine) @engine = engine end def start @engine.start end end gas_engine = GasEngine.new electric_engine = ElectricEngine.new gas_car = Vehicle.new(gas_engine) electric_car = Vehicle.new(electric_engine) gas_car.start # Starting gas engine electric_car.start # Starting electric engine
이 차량 예의 SOLID 원칙을 따르면 유지 관리, 확장 및 새로운 요구 사항에 적응하기 쉬운 시스템을 구축할 수 있습니다.
링크드인: https://www.linkedin.com/in/anandsoni11/
위 내용은 차량 예시와 재미있는 비유를 사용한 SOLID 원칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!