ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CS(Computer Science) - 객체지향의 5대 원칙
    Computer Science/OS & Algorithm 2018. 5. 23. 00:12

    github 자료와 메모 자료들을 정리하던 도중, CS 관련 지식들을 정리해놓은 자료들을 발견했다.

    아주 기초적이고 쉬운 내용들이지만, 복습 겸 블로그에 다시 정리하고자 한다.


    그 중 객체지향 5대 원칙(SOLID)에 대해 정리하도록 하겠다.







    SRP - Single Responsibility Principle : 단일책임의 원칙


    - 1클래스는 1개의 책임만을 가져야 한다. 클래스를 변경하는 이유는 1가지여야 한다.

    - 메소드로도 확장이 가능한 개념이다. 1메서드는 1개의 기능만을 담당해야 한다.

    - 1개의 책임을 진다는 것은, 예를 들어 Teacher라는 클래스가 있으면, 티처에 해당하는 1개의 책임만을 부여해야 한다.

    - 티칭이라는 책임을 부여하였으면, 러닝이라는 책임을 부여하면 안된다.




    OCP - Open Close Principle : 개방 폐쇄의 원칙


    - 변경에 대해서는 폐쇄, 확장에 대해서는 오픈되어야 한다.

    - 상속이나 기능이 추가되는 경우, 원래의 기능이 변경되었을 때 하위모듈에서 문제가 생길수 있다. 따라서 변경은 폐쇄해야 한다.

    - 대신 상속이나 기능을 추가하기 위해 확장에 대해서는 오픈하여야 한다. 이 때, 변경의 폐쇄성을 고려하여 디자인 해야 한다.




    LSP (Likov Substitution Principle) : 리스코브 치환법칙


    - 모듈 P의 하위모듈 S가 있다고 할 때, P는 S로 치환되어도 정상적으로 동작해야 한다.

    왜 해야하나 >> List자료형을 사용중이었는데, 이를 속도개선을 위해서 HashSet으로 바꾼다고 가정하자. 이렇게 갈아끼우기 편하려면, 두 자료구조의 공통의 상속체인 Collection으로 유연하게 넘겨주다가, Collection c = new HashSet 이렇게만 바꿔주면 된다.

    - 즉, 상위 객체인 콜렉션 객체로 사용할때 문제없이 여기저기서 돌아가는게 가능하다면 자료형을 유연하게 바꿀수 있다.




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


    - 인터페이스는 분리되어야 한다. 어딘가에서 인터페이스를 구현할 때, 불필요한 구현까지 상속받으면 안된다는 것.




    DIP (Dependency Inversion Principle) :  의존성 역전의 원칙

    - 의존 역전원칙. 고수준 모듈은 하위 수준 모듈의 구현에 의존해서는 안된다. 인터페이스로 구현을 세분화 시켜, 의존을 분산시켜야 한다.






    참고한 사이트 - https://trazy.gitbooks.io/oop/content/oop-dip.html


    댓글

분노의 분석실 Y.LAB