Review: 소프트웨어 개발의 지혜 - 7장_애자일 설계란 무엇인가

백근영·2020년 3월 25일
0
post-thumbnail

설계가 잘못되었을 때

설계가 잘못되었을 때 소프트웨어는 다음과 같은 증상을 보인다.

  • 경직성 - 설계를 변경하기 어려움
  • 취약성 - 설계가 망가지기 쉬움
  • 부동성 - 설계를 재사용하기 어려움
  • 점착성 - 제대로 동작하기 어려움
  • 불필요한 복잡성 - 과도한 설계
  • 불필요한 반복 - 마우스 남용
  • 불투명성 - 혼란스러운 표현

소프트웨어가 이러한 증상을 나타낼 때 '악취가 난다'라고 표현하며, 이러한 악취는 부분적인 코드에서만이 아니라 프로젝트 전체로 퍼져 나간다.

원칙

이 절에서는 앞서 말한 악취를 제거하고 현재 기능 집합에 대해 최적의 설계를 구성할 수 있도록 돕는 객체 지향 설계 원칙들을 설명한다.

  • SRP - 단일 책임 원칙
  • OCP - 개방 폐쇄 원칙
  • LSP - 리스코프 치환 원칙
  • ISP - 인터페이스 분리 원칙
  • DIP - 의존성 역전 원칙

이는 익히 알고 있던 객체 지향 SOLID 원칙인데, 저자는 객체 지향 뿐만 아니라 소프트웨어 공학 전반에서 오랫동안 믿어져 오고 있는 소중한 원칙들이라고 강조한다. 따라서 이 원칙들은 꼭 객체 지향과 관련지어서 생각하지 않고 넓은 범위에서 도움이 될만한 지식이라고 생각하는게 좋을 듯 하다.

악취와 원칙

원칙은 소프트웨어에서 악취가 날 때가 아니면 남용하지 않는 것이 좋다. 원칙은 아무때나 사용할 수 있는 '향수'가 아니기 때문에, 원칙에 대한 맹종은 불필요한 복잡성이라는 또다른 악취를 낳을 수도 있다.

무엇이 소프트웨어의 부패를 촉진시키는가?

소프트웨어가 부패하는 일차적인 요인은 요구사항의 변경이다. 맨 처음의 요구사항을 잘 반영하도록 설계되었다고 하더라도, 단 몇 번의 요구사항 변경으로 인해 소프트웨어는 빠르게 부패할 수 있다. 소프트웨어가 부패하는 이유로 요구사항의 변경을 탓하고만 있는다면 그것은 무책임한 것이다. 개발자로서 우리는 요구사항은 언제나 변경된다는 것을 너무 잘 알고 있으며, 변화하는 세상에서 요구사항이 변경되는 것은 당연한 일이다. 그러므로 변화에 잘 대응할 수 있는 설계를 하는 것이 중요하다.

profile
서울대학교 컴퓨터공학부 github.com/BaekGeunYoung

0개의 댓글