수색…


소개

오픈 클로즈 원칙 (Open Close Principle)은 코드의 설계 및 작성은 기존 코드에서 최소한의 변경으로 새로운 기능을 추가해야하는 방식으로 수행되어야한다고 말합니다. 디자인은 가능한 한 많은 기존 코드를 변경하지 않고 새로운 기능을 새로운 클래스로 추가 할 수있는 방식으로 수행되어야합니다. 클래스, 모듈 및 함수와 같은 소프트웨어 엔티티는 확장을 위해 열려 있어야하지만 수정을 위해 닫혀 있어야합니다.

비고

모든 원칙과 마찬가지로 열린 원칙은 단지 원칙 일뿐입니다. 유연한 디자인을 만드는 데는 추가 시간과 노력이 필요하므로 새로운 수준의 추상화가 도입되어 코드의 복잡성이 증가합니다. 따라서이 원칙은 변경 될 가능성이 가장 큰 영역에 적용되어야합니다. 데코레이터와 같이 코드를 변경하지 않고 코드를 확장하는 데 도움이되는 많은 디자인 패턴이 있습니다.

목록 열기

/* 
* This design have some major issues
* For each new shape added the unit testing
* of the GraphicEditor should be redone                      
* When a new type of shape is added the time
* for adding it will be high since the developer
* who add it should understand the logic
* of the GraphicEditor.
* Adding a new shape might affect the existing
* functionality in an undesired way, 
* even if the new shape works perfectly   
*/ 

class GraphicEditor {
    public void drawShape(Shape s) {
        if (s.m_type==1)
            drawRectangle(s);
        else if (s.m_type==2)
            drawCircle(s);
    }
    public void drawCircle(Circle r) {....}
    public void drawRectangle(Rectangle r) {....}
}

 class Shape {
     int m_type;
 }

 class Rectangle extends Shape {
     Rectangle() {
         super.m_type=1;
     }
 }

 class Circle extends Shape {
     Circle() {
         super.m_type=2;
     }
 }

목록 열기

/*
* For each new shape added the unit testing
* of the GraphicEditor should not be redone
* No need to understand the sourcecode
* from GraphicEditor.
* Since the drawing code is moved to the
* concrete shape classes, it's a reduced risk
* to affect old functionallity when new
* functionallity is added.
*/ 
class GraphicEditor {
     public void drawShape(Shape s) {
         s.draw();
     }
 }

 class Shape {
     abstract void draw();
 }

 class Rectangle extends Shape  {
     public void draw() {
         // draw the rectangle
     }
 } 


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow