1. Avoid Combining unrelated or Logically Separate Concepts.

   - 하나의 클래스는 관련 기능 혹은 하나의 기능만을 책임지게 하고, 상관없는 관련 기능들을 포함시키지 않음.

 

'설계 > 객체지향설계' 카테고리의 다른 글

SOLID - 개발 원칙.  (0) 2017.01.30
캡슐화.  (0) 2017.01.26

1.  Single Responsibility Principle

    하나의 객체는 하나의 책임[역할]만을 담당해야 한다.

   
객체를 호출하는 한개 이상의 클라이언트[객체]가 서로 다른 메소드를 호출하게 된다면, 별도로 구현을 해야 한다. 

데이터를 가져와 화면에 뿌려주는 역할을 담당하는 클래스가 있다고하자.

      

 

2. Open-Closed Principle 

 - 기능 변경과 확장에는 열려있고,  그 기능을 사용하는 코드는 수정하지 않는다. 

 - 변화가 예상되는 것을 추상화해서 변경의 유연함을 얻도록 해준다. 

 - 실무에서, 변경이 필요한 경우에 대해서, 관련된 구현을 추상화해서 개방 폐쇄 원칙에 맞게 수정할 수 있는지 

     확인해야 한다. 


  

  원리 1.

     1. 하나의 기본 인터페이스를 정의하고, 각 상황별로 상속 구현한 클래스를 제공한다. 
     2. 인터페이스는 기능을 사용하는 코드상에서는 변경되지 않고, 단지 인터페이스를 구현한  클래스에 따라 변경/확장이 이루어진다. 

  원리 2 - 템플릿 메소드.

   

  개방 폐쇄 원칙이 깨질 때의 주요 증상.

    1. 다운 캐스팅을 하게 된다.  

         상속 구현된 한 클래스에서 인터페이스에서 제공하지 않는 메소드를 

    2. 비슷한 if-else 블록이 존재한다. 

      

3. 리스코프 치환 원칙[Liskov substitution principle)

   설명:  상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입이 사용하는 프로그램은 정상적으로 동작해야 한다는 원칙.

             즉, 예상되는 입력값과 결과값의 범위가 동일해야 한다는 것을 말한다. 

     

   위반사례 

           1. 명시된 명세에서 벗어난 결과값을 리턴한다.
           2. 명시된 명세에서 벗아난 예외사항을 발생한다.
           3. 명시된 명세에서 벗어난 기능을 수행한다. 
    
           4. 다운캐시팅하여 변환된 객체의 메소드를 이용하는 것은 리스코프 치환 원칙에 어긋난다.
              




4. 인터페이스 분리 원칙[interface segregation principle]

   설명: 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.   

          이는 곧 단일 책임 원칙에 부합된다.  

         이렇게 함으로서 일부 인터페이스가 수정되었다면, 그 인터페이스만 빌드하여 링크하면 되기 때문에, 컴파일 시 시간이 단축된다.
    

5. 의존 역전 원칙[Dependency inversion principle]

     - 고수준 모듈은 저수준 모듈이 구현에 의존해서는 안된다. 저수준 모듈이  고 수준 모듈에서 정의한 추상 타입[인터페이스]에 의존해야 한다.
     - 이말은 호출할 객체를 직접 호출하지 않고, 그 객체의 클래스의 상위 인터페이스를 통해서 접근을 하라는 의미이다. 
     - 이렇게 함으로서, 하위 구현은 고수준 모듈과 별도로 구현이 가능하다. 



여기서 주의할 것은 소스코드 구조상의 의존이지, 런타임에서의 의존이 아니다. 







'설계 > 객체지향설계' 카테고리의 다른 글

개발 원칙.  (0) 2019.05.30
캡슐화.  (0) 2017.01.26

- 캡슐화.

 1. 객체의 역할 내부의 구현을 외부에 노출하지 않음으로 해서, 의존하고 있는 다른 객체에 영향을 최소화 하기 위해 필요하다.



- 규칙

 1. Tell, Don't Ask. 

    - 데이터를 요구하는 것이 아니라, 기능을 실행해달라는 규칙.

    - 데이터를 가져오는 것은 데이터를 중심으로 코드를 작성하게 만드는 원인이 되며, 이는 곧 절차지향적인 코드를 유도하게 된다. 


 2. 데미테르의 법칙 (Law of Demeter)

    - Tell, Don't, Ask 규칙을 따를 수 있도록 만들어 주는 또 다른 규칙이다.

    

    - 항목.

        메소드에서 생성한 객체의 메소드만 호출.

        파라미터로 받은 객체의 메소드만 호출.

        필드로 참조하는 객체의 메서드만 호출.


   -> 객체의 메소드를 통해 반환받은 객체의 메소드를 직접 호출하지 않도록 하는 원칙이다. 


   - 평소 지켜지지 않는 현상.

      1. 연속된get 메소드 호출.

          value = someObject.GetA().GetB().GetValue();


      2. 임시변수의 get 호출이 많음

             A a = someObject.getA();

             B b = a.getB();

             C c = b.getC();



  

  


          

 





'설계 > 객체지향설계' 카테고리의 다른 글

개발 원칙.  (0) 2019.05.30
SOLID - 개발 원칙.  (0) 2017.01.30

+ Recent posts