본문 바로가기

소프트웨어공학

[소프트웨어 설계론] 아키텍처 설계 원리

  • 좋은 설계의 조건
    • 사용자의 비기능 요구사항(품질)을 달성할 수 있는 설계
    • 변경 용이성이 높은 설계
  • 설계 원칙
    • 변경되는 것과 변경되지 않는 것을 구별하자
      • 변경이 쉽다 = 변경이 되어도 다른 클래스 및 모듈에 영향이 없다.
      • 의존성 끊는 법
        • B 가 변경되면 A가 변경되는 모습 (A->B) 일 때, A -> B' (추상 클래스) <- B 로 변경하여 의존성 낮춤
      • SDP (Stable Dependency Principle) : 안정된 의존성 원칙
        • 불안정한 컴포넌트가 상단에 위치하고, 상대적으로 안정된 컴포넌트로 의존하기
        • 다른 컴포넌트에 의존하지 않을수록 안정되어 있다.
        • 불안정성 (I) = Fan-out / (Fan-in + Fan-out)
          • Fan-in : 다른 컴포넌트가 나에게 의존
      • SAP (Stable Abstractions Principle) : 안정된 추상화 원칙
        • 안정된 컴포넌트는 추상화된 상태여야하고, 안정성이 확장성을 방해해선 안됨
        • I 는 불안정성, A 는 추상화 정도라고 할 때,
          • A = -I 의 상관 관계가 적절함 (주계열)
          • I = 0, A = 0 --> 안정한데, 추상화가 안되어 있다. -->  안정적이므로 변경이 어렵고, 추상적이지 않으므로 확장성이 낮다.
          • I = 1, A = 1 --> 불안정한데, 추상화가 잘되어 있다. --> 의존적인데 추상화되어 있으므로 의미없는 컴포넌트
      • ADP (Acyclic Dependencies Principle) : 의존성 비순환 원칙
        • 컴포넌트 의존성 그래프에 cycle 형태가 있으면 X
          • 결국 서로가 서로를 의존하는 형태가 되므로 변경을 하면 전부 영향을 받음
          • DIP 및 인터페이스 구성을 통해 새로운 의존성 그래프를 구성
      • top-down 설계 불가
        • 컴포넌트는 하향식으로 구성될 수 없으며, 클래스가 먼저 설계되어야만 컴포넌트 간의 의존성 구조 고려 가능
  • SOLID 원칙
    • SRP (Single responsibility principle)
      • 하나의 클래스는 하나의 책임만 가져야 한다. 단일 책임 원칙
      • 하나의 모듈은 하나의 역할만 해야한다
        • Automobile 클래스의 경우, go(), stop() 함수는 SRP 를 준수하나, drive() 함수는 운전자의 역할에 대한 함수이므로 SRP 를 위반함
      • Cohesion (응집력) 을 높이고, 다른 클래스와의 커플링을 낮춤
    • OCP (Open Closed Principle)
      • 클래스는 확장에 열려있고, 수정에는 닫혀있어야 한다.
        • 수정에 닫혀 있다 = 클래스의 코드를 수정하지 못하게 한다
        • 확장에 열려 있다 = 클래스의 기능을 override 를 통해 확장할 수 있다
      • 꼭 상속의 문제는 아닌 유연성에 대한 원칙
    • LSP (Liskov Substitution Principle)
      • 하위 Type 은 상위 Type 으로 교체가 가능해야 한다
      • 하위 클래스는 상위 클래스의 행위(기능)을 포함하고 있어야 한다
    • ISP (Interface Segregation Principle)
      • 인터페이스는 단일 인터페이스보다 Client 별 세분화된 인터페이스 구조가 더 권장됨
      • Client 클래스는 사용하지 않는 인터페이스에 의존적이지 않아야 함
    • DIP (Dependency Inversion Principle)
      • 제어흐름은 추상적인 쪽에서 상세한 쪽으로, 의존성은 반대가 되도록 역전(inversion) 시켜야 한다
      • 대표적으로 추상클래스를 중간에 두어 DIP 를 실현 시킬 수 있음

 

반응형