객체지향 설계의 5원칙
Web/Java (Spring+JSP)

객체지향 설계의 5원칙

- 응집도와 결합도

    - 좋은 설계를 위해서는 결합도는 낮추고 응집도는 높여야 한다.

     

    - 결합도 : 모듈 ( 클래스) 간의 상호 의존 정도를 나타내는 지표로써, 이가 낮아야 모듈간의 상호 의존성이 줄어들어 객체의 재사용및 유지보수가 가능하다.

   -> 만약 A,B,C라는 클래스가 존재할때, B가 A 클래스에 의존하고, C가 B 클래스에 의존하고 있으면, A 클래스 하나를 수정하면 B,C 클래스를 모두 수정해야될 가능성이 존재한다.

   

   - 응집도 : 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로, 응집도가 높은 모듈이 하나의 책임에 집중하고  독립성이 높아져, 재사용과 유지보수가 용이하다.

 

-> fileReader를 String에서 file로 변경한다. (하나의 클라이언트가 많은 기능을 갖고 있기 때문에 단일 책임의 원칙으로 분리시켜 주어야 한다.) 다른 모듈들이 추가가 되어도 자신의 기능에 대해 응집도가 높은 클래스들은 재사용하기 유리하고, 다른곳을 수정할 필요도 없다.

 

수정이 일어나면 코드 전체가 영향을 받게 될 수 있다.
다형성을 위해 move()를 오버라이딩 했다. 

=> 오버라이딩을 통해 각각의 객체가 지정한 역할을 하고 있는 것을 확인할 수 있다. 각각의 클래스가 자신에게 관련된 책임만 갖고 있다.

 

  2. OCP (Open Closed Principle) 개방 폐쇄 원칙

   : 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.

  -> 상위 클래스 또는 인터페이스를 중간에 둠으로써 자신의 변화에 대해선 폐쇄적이지만, 인터페이스는 외부의 변화에 따라서 확장을 개방해 줄 수 있다.

   EX) JDBC, MyBatis  등의 Stream(Input,Out)

 

 

 

3. LSP - 리스코프 치환 법칙

  : 서브 타입은 언제나 자신의 상위(기반) 타입으로 교체할 수 있어야 한다.

 

4. ISP - 인터페이스 분리 원칙

-> 지도라는 객체는 여러 가지 기능을 갖고 있을 수 있다. 자전거를 위해선 자전거 길 안내와 관련된 메소드만 가져다 사용하면 된다. 나머지 기능은 필요로 하지 않는다.

 

 

 

5. DIP: 의존 역전 원칙

-> 자신보다 변하기 쉬운 것에는 의존하면 안된다.