소프트웨어 개발의 원칙

원칙을 정리한 기사가 많았지만 이것만 보면 도저히 이해가 안 돼 자기 생각대로 기사를 썼다.

SOLID


대상 프로그래밍 안내
다음 5가지 원칙의 이니셜을 따서 SOLID의 원칙이라고 한다
  • SRP 단일 책임 원칙
  • OCP 켜기/끄기 원칙
  • LSP 목록의 교체 지침
  • ISP 인터페이스 분리 원칙
  • DIP 의존성 반전의 법칙
  • SRP 단일 책임 원칙


    학급은 단일한 책임을 져야 한다
    예를 들어 클래스가 A와 B의 대상을 담당할 때 A의 행위를 수정할 때도 B에 영향을 줄 수 있다.
    A 
      -> クラス
    B
    
    따라서 다른 원정경기에 영향을 미치지 않도록 학급에 대한 책임은 하나뿐이다.
    A -> Aクラス
    B -> Bクラス
    

    OCP 공개 관문의 원칙


    클래스는 개방식이고 변경은 닫기식이어야 한다
    클래스에 기능을 추가할 때 코드를 변경하는 것이 아니라 추가적인 디자인을 해야 한다.
    예를 들어 ABC라는 3가지 기능을 가진 클래스 ABC의 경우 D라는 기능을 추가하려면 클래스 ABC에 D라는 기능을 직접 탑재하는 형태가 된다.
    이렇게 되면 ABC 기능을 사용하는 다른 학급에도 영향을 미칠 수 있다.
    クラスABC + D = クラスABCD
    
    따라서 클래스 ABC를 각자의 클래스로 나누고 이런 클래스에 D를 추가한 클래스를 만들어 클래스 ABCD를 만든다.
    クラスABCD = クラスA + クラスB + クラスC + クラスD
    
    결과 제작류 ABCD가 아닌 클래스 ABCD는 클래스 A, B, C, D로 구성됐다.

    LSP 목록의 교체 지침


    자류는 부모류와 같은 동작을 할 수 있어야 한다
    반에서 다른 반을 만들 때 반은 부모가 되고 새로 만든 반은 자반이 된다.이게 상속이야.
    하위 클래스에 상위 클래스와 같은 기능이 없으면 하위 클래스를 상위 클래스로 대체하는 경우 큰 변화가 발생합니다.
    예를 들어 A기능이 있는 부류, B기능이 있는 부류가 존재하는 경우 B를 부류로 설정할 때 A기능을 다시 실시해야 한다.
    A, B -> B + A
    
    따라서 같은 기능을 가지기 위해 하위 클래스는 A로 확장된 A'기능을 가진다.
    A, A' -> A'
    
    이렇게 하면 B가 부류라도 A의 기능은 확장된 A'를 통해 실현할 수 있다.

    ISP 인터페이스 분리 지침


    클라이언트가 사용하지 않는 방법에 대한 의존을 강요해서는 안 된다
    예를 들어 클래스에서 B 기능을 실현할 때 A와 B 기능을 정의한 인터페이스를 계승하면 A도 반드시 실현해야 한다.
    IAB -> B + A
    
    이러한 상황을 피하기 위해 인터페이스는 가능한 한 작은 단위로 분리한다.
    IA, IB -> A, B
    

    DIP 의존성 역전의 법칙


    상급 모듈은 하급 모듈에 의존할 수 없다.각자 추상에 의존해야 한다
    예를 들어 A가 B에 의존하는 경우 B가 변경될 때 A도 수정해야 한다
    A -> B
    
    따라서 A를 B의 추상에 의존함으로써 B가 바뀌어도 A의 변화는 최소화할 수 있다
    A -> IB <- B
    
    A는 B의 세부 사항을 알 필요가 없다.

    KISS


    Keep It Short And Simple
    간단 명료하다
    어쨌든 코드는 간단해야 돼.
    인코딩이 복잡할수록 유지 보수가 어려워지기 때문에 어떻게 간단하게 유지하는가가 매우 중요하다.
    어려운 것은 간단하지만, 간단하게 쓰는 것은 매우 어렵다.

    YAGNI


    You Aren't Going to Need It
    그건 필요 없어요.
    코드는 나중에 설치해야 합니다.
    일단... 실제 설치한 코드가 활용된 경우는 얼마나 될까.(내 경험에 의하면 십중팔구는 필요 없다)
    차라리 그 코드의 존재로 기술적인 부채가 되는 경우도 적지 않을 것 같다.

    DRY


    Don't Repeat Yourself
    되풀이하지 마라
    같은 코드를 반복해서 쓰지 않는다.
    중복된 코드는 개선할 때 중복된 모든 부분을 수정해야 한다
    따라서 가능한 한 처리를 함수나 모듈에 집합한다.
    그러나 과도한 DRY는 밀접하게 결합하는 반면 안 좋은 경우도 있기 때문에 무엇이든 DRY로 만들 수 있는 것은 아니다.

    PIE


    Program Intently and Expressivery
    프로그래밍
    코드는 명확하게 쓴 의도와 동시에 쓴 것이다.
    코드를 쓰는 것보다 더 많이 읽는다.쓰기 쉬울 때보다 읽기 쉽다는 의식을 가져야 한다는 것이다.

    참고 자료


    https://www.amazon.co.jp/Clean-Architecture-달인에게 배운 소프트웨어의 구조와 디자인-Robert-C-Martin/dp/40480656/ref=sr-1_1?adgrpid=87907524906&gclid=CjwKCAiAwKyNBhBfEiwA_mrUMgcAdQPkFetBZWtrudCyuW8dBaGrhOeJrbIrYejUvT8S9HIyb84LTBoC2UEQAvD_BwE&hvadid=553966778093&hvdev=c&hvlocphy=1009298&hvnetw=g&hvqmt=e&hvrand=13852815619227917782&hvtargid=kwd-882199003173&hydadcr=21539_13289195 & jp-ad-ap=0 & 키 월드 = 청정+구조+서적&qid=163868932 &sr=8-1
    https://www.amazon.co.jp/설계 3년 전 일생에 유용한 101의 원리 원칙 - 상전-훈/dp/4798046140

    좋은 웹페이지 즐겨찾기