728x90

1. 결합도

   클래스간의 상호 연결성을 측정하는 것

   낮은 결합도를 가지려면 하나의 객체의 변경이 다른 객체에 영향을 미쳐서는 안된다.

   

  - tightly coupling(강한 결합)

     1) 하나의 클래스가 다른 클래스를 사용할 때 클래스의 이름을 직접 사용하는 것

     2) 교체가 불가능하고 경직된 디자인이 된다. 

 

 - loosely coupling(약한 결합)

    1) 하나의 클래스가 다른 클래스를 사용할 때 규칙에 해당하는 부모 클래스 이름(인터페이스, 추상클래스) 를 사용하는 것

    2) 교체가 가능한 유연한 디자인이 된다. 

 

2. 응집도

    하나의 클래스가 하나의 기능을 온전히 순도 높게 담당하고 있는 정도

    하나의 클래스가 하나의 책임만 담당

 

 

3. 단일 책임의 원칙 ( SRP: The Single Responsibility Principle )

   - 클래스에는 한 가지 종류의 책임만 두어야 한다. 

      File 클래스 - 파일처리 책임

      String 클래스 - 문자열 표현 처리 책임

 

   - 높은 응집도와 낮은 결합도 원칙을 지킬수 있는 세부 원칙이다. 

   - 클래스가 하나 이상의 책임을 맡게 되면 결합도가 커지고 변경이 어려워진다. 

    


4. 개방-폐쇄의 원칙 ( OCP : The Open-Closed Principle )

   - '확장'에 대해서는 개방되어야 하지만, '변경'에 대해서는 폐쇄되어야 하는 원칙


     


    

    - Context 클래스에서 멤버변수로 Interface를 소유하고 있다. 

    - 새로운 ImplementationThree 클래스를 추가하여 기능을 확장하는 것은

      무척 자연스럽다.

      ( 실행시 Context 멤버변수를 변경하는 일은 Context 생성자를 실행할 때, 

        실제 필요한 Strategy객체를 생성하여 매개변수로 전달하면 되기 때문이다.) 

    - 이러한 구조는 '인터페이스의 변경은 닫혀 있으나 인터페이스의 구현은 열려있다'라고 할수 있다. 

    - 기능을 확장 했을 때, 기존 클래스의 변경을 최소화할 수 있다는 점이다. 


5. 인터페이스 분리의 원칙 ( ISP : Interface Segregation Principle )

   - '클라이언트는 자신이 사용하지 않는 메소드와 의존 관계를 갖지 않도록 해야한다'

   

    - Service 인터페이스가 변경되면 관련된 ClinetA, ClientB, ClientC 모두 변경해야한다. 

    - ISP를 적용하여 클라이언트에게 꼭 필요한 메소드만을 제공하도록 변경하면, 

      IManager의 변경에 따른 변화를 최소화할 수 있다. 

     

6. 리스코프 치환의 원칙 ( LSP : Liskov Substitution Principle )

   - 자식 타입들은 부모 타입들이 사용되는 곳에 대체될 수 있어야 한다는 원칙이다.

     즉 부모 클래스가 사용되는 곳에 자식 클래스로 치환 하더라도 문제가 없어야 한다는 의미이다.


7. 의존 관계 역전의 원칙 ( DIP : Dependency Inversion Principle )

   - 자주 변경되는 클래스에 의존하지 말고 추상 클래스나 인터페이스에 의존해야한다

   - 일반적으로 추상 클래스와 인터페이스를 변경하기보다는 Concrete Class를 변경해야 되는 경우가

     더 많기 때문에, 콘트리트 클래스에 의존하면 그 클래스에 의존하는 클래스를 수정해야 하는 경우가 더많다. 

 

728x90

+ Recent posts