ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Solid 란
    TIL 2021. 1. 17. 13:47

    로버트 마틴이 2000년대 명명한 객체지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 앞글자를 따서 소개한 것.

    목적은 유지보수와 확장이 쉬운 시스템 개발을 위해.

     

    두문자 약어 개념
    S SRP 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다.
    O OCP 개방-폐쇄 원칙 : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
    L LSP 리스코프 치환 원칙 : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
    I LSP 인터페이스 분리 원칙 : 인터페이스는 분리가 되면 쪼개라
    D DIP 의존관계 역전 원칙 : 프로그래머는 "추상화에 의존해야지, 구체화에 의존하면 안된다." 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

     

     

    단일 책임 원칙 : 한 클래스는 하나의 일만 해야한다는 것,

    예로 사각형 클래스는 그리는 책임과 , 계산하는 책임을 동시에 가지고 있다면 하나이상의 책임을 지고 있다는 것

    그래서 둘 중 하나를 빼던가 둘 다 빼던가 책임을 분리해야 한다.

     

    개방-폐쇄 원칙 : 확장에는 열려 있고, 변경(수정)에는 닫혀 있어야 한다. 무슨 뜻일까..

    사용자가 원하는 기능이 새롭게 추가 됬을 때 원래 있던 객체를 수정하는 것이 아니라 새로운 객체를 추가함으로써 

    확장에는 열려 있고, 수정에는 닫혀 있다는 말을 지킬 수 있게 되는 거 같다.

    예로 오각형,팔각형이 추가될 때 기존 코드를 수정하는 것이 아닌 각 객체를 추가하는 것만으로도 기능이 구형될 때가 

    있을 수 있겠다. 이렇게 하려면 객체간의 의존도를 줄이고 다형성을 활용해야 할 것이다.

     

    처음부터 개방-폐쇄 원칙을 지키는 것은 어렵기에 처음 총알은 맞고 두 번째 총알에는 확실히 보호하자는 게 좋다.

    ocp와 거리가 먼 소프트 웨어 : 변경이 단계적으로 퍼져나간다.

    ocp를 잘 따르는 소프트 웨어 : 변경이 필요할 때 기존 코드수정 보다는 새로운 코드를 추가하면 된다.

     

    리스 코프 치환 원칙 : 자식이 부모의 역할을 대체할 수 있어야 한다. 다형성을 이용해야 한다.

    예로 피규어를 사용할 때 피겨 클래스 자리에 삼각형, 사각형이 들어가도 작동해야 한다는 것이다.

     

    인터페이스 분리 원칙 : 클라이언트가 지신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.

    어떤 클라이언트에서는 사용하지 않고, 다른 어떤 클라이언트에서는 사용하는 메소드가 있다면

    이 메소드가 변경될 때 사용하지 않는 클라이언트에 영향을 줄 것이다. 그럼 인터페이스를 분리해야 한다.

    예로 drawable과 calcable 인터페이스를 만들었는데 둘 다를 상속받아 사용하니 피겨에서는 calcable을 사용하지 않는데 calc를 사용할 수 있었다. 이렇게 되면 사용자는 불필요한 기능을 사용할 수 있게 돼서 클래스의 목적이 명확해지지 않는다.

     

    의존관계 역전 원칙 : 상위 수준의 모듈은 하위 수준의 모듈에 의존해선 안된다. 둘 다 추상화에 의존 해야한다.

     

    victorydntmd.tistory.com/291

     

    [디자인패턴] SOLID 원칙

    SOLID 원칙 SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 원칙( SRP, OCP, LSP, DIP, ISP )을 말합니다. 하지만... 개념을 알아도 실현하기는 어려운 원칙들입니다. 그럼에도 설계원칙을 알아야 하

    victorydntmd.tistory.com

     

    'TIL' 카테고리의 다른 글

    함수형 프로그래밍  (0) 2021.01.18
    2021.01.18 기록장  (0) 2021.01.17
    2021.01.17 기록장  (0) 2021.01.16
    OOP에 관해서  (0) 2021.01.16
    2021.01.16 기록장  (0) 2021.01.15

    댓글

Designed by Tistory.