728x90
반응형

- OCP(Open-Closed Principle) : 개방-폐쇄 원칙
개방-폐쇄 원칙은 확장에는 열려 있고 변경에는 닫혀 있어야 한다는 원칙이다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야 하며, 변경에 유연하면서도 안정적인 시스템을 만드는 데 도움을 준다.
아래는 개방-폐쇄 원칙이 위배된 코드이다.
public class Product {
private String name;
private double price;
private String type;
/* Constructor, getters, and setters */
public double calculateDiscount() {
if (this.type.equals("book")) {
return this.price * 0.05;
} else if (this.type.equals("toy")) {
return this.price * 0.1;
} else if (this.type.equals("electronics")) {
return this.price * 0.15;
} else {
return this.price * 0.02;
}
}
}
위의 코드에서 calculateDiscount() 메서드에서 상품의 유형(type)에 따라 할인률을 계산하고 있다. 만약 새로운 상품 유형이 추가된다면, calculateDiscount() 메서드를 수정해야 한다.
아래는 개방-폐쇄 원칙이 적용된 코드이다.
public abstract class Product {
private String name;
private double price;
/* Constructor, getters, and setters */
public abstract double calculateDiscount();
}
public class BookProduct extends Product {
@Override
public double calculateDiscount() {
return this.getPrice() * 0.05;
}
}
public class ToyProduct extends Product {
@Override
public double calculateDiscount() {
return this.getPrice() * 0.1;
}
}
public class ElectronicsProduct extends Product {
@Override
public double calculateDiscount() {
return this.getPrice() * 0.15;
}
}
public class OtherProduct extends Product {
@Override
public double calculateDiscount() {
return this.getPrice() * 0.02;
}
}
위의 코드에서는 Product를 추상 클래스로 만들고, calculateDiscount()를 추상 메서드로 선언하였다.
이렇게 함으로써, 새로운 상품 유형이 추가되더라도 해당 유형에 대한 할인률을 계산하는 새로운 클래스만 만들면 되므로 기존 코드를 수정할 필요가 없어진다.
728x90
반응형