SOLID 원칙은 아래 단어들의 약어이다.
각각이 어떤 의미를 띄는지 알아보자.
적용 전
Result
클래스는 checkResult
, isValidate
, getRequest
, show
라는 각기 다른 기능을 모두 가지고 있음class Result {
String checkResult() {...}
void isValidate() {...}
String getRequest() {...}
void show() {...}
}
적용 후
class Result {
String checkResult() {...};
...
}
class Validate {
void isValidate() {...};
...
}
class Network {
String getRequest() {...}
...
}
class Printing {
void show(){...}
...
}
적용 전
class VehicleMileage {
void showMileage(dynamic anyVehicle) {
if(anyVehicle is Bike) {
print(anyVehicle.getBikeMileage());
} else if(anyVehicle is Car) {
print(anyVehicle.getCarMileage());
}
}
}
class Bike {
String getBikeMileage() = "45km/l";
}
class Car {
String getCarMileage() = "14km/l";
}
적용 후
class VehicleMileage {
void showMileage(Vehicle vehicle) {
print(vehicle.getMileage());
}
}
class Bike extends Vehicle {
String getMileage() = "45km/l";
}
class Car extends Vehicle{
String getMileage() = "14km/l";
}
abstract class Vehicle {
String getMilage();
}
적용 전
checkResult()
, codingTestResult()
)abstract class Result {
checkResult();
codingTestResult();
}
class MechanicalBranch extends Result {
checkResult() {...}
codingTestResult() {...}
}
class ComputerScienceBranch extends Result {
checkResult() {...}
codingTestResult() {...}
}
적용 후
abstract class OfflineResult {
checkResult();
}
abstract class CodingResult {
codingTestResult();
}
class MechanicalBranch implements OfflineResult {
checkResult() {...}
}
class ComputerScienceBranch implements OfflineResult, CodingResult {
checkResult() {...}
codingTestResult() {...}
}
적용 전
MechanicalBranch
의 codingTestResult()
는 아무런 클래스에서도 사용되지 않은 메소드Result
라는 추상 클래스에서 두개의 다른 역할을 수행abstract class Result {
checkResult();
codingTestResult();
}
class MechanicalBranch implements Result {
checkResult() {...}
// 사용하지 않는 메소드라고 가정
codingTestResult() {...}
}
class ComputerScienceBranch implements Result {
checkResult() {...}
codingTestResult() {...}
}
적용 후
abstract class OfflineResult {
checkResult();
}
abstract class CodingResult {
codingTestResult();
}
class MechanicalBranch implements OfflineResult {
checkResult() {...}
}
class ComputerScienceBranch implements OfflineResult, CodingResult {
checkResult() {...}
codingTestResult() {...}
}
적용
CheckOut
클래스는 Payment
클래스가 어떤 방식으로 작동되는지 알지 못하는 상태 pay.payment()
라는 메소드를 사용하여 Payment
클래스에 접근 가능abstract class Payment {
payment();
}
class PaymentViaCreditCard implements Payment {
payment() {...}
}
class PaymentViaDebitCard implements Payment {
payment() {...}
}
class PaymentViaBhimUPI implements Payment {
payment() {...}
}
class Checkout {
checkOut(Payment pay){
pay.payment();
}
}