프로그램이 동작하도록 만드는 데에 엄청난 지식과 기술이 필요하지는 않지만, 프로그램을 제대로 만드는 일은 어렵다. 이를 위해서는 적정 수준의 지식과 기술을 겸비해야 하지만, 대다수의 젊은 프로그래머는 이 수준에 도달하지 못했다.
소프트웨어 시스템이 이해관계자에게 제공하는 두 가지 가치: 행위와 구조
패러다임은 어떤 프로그래밍 구조를 사용할지, 언제 이 구조를 사용해야 하는지를 결정한다.
프로그래밍은 어렵고, 프로그래머는 프로그래밍을 잘 하지 못한다. 단순한 프로그램도 복잡한 세부사항을 담고 있고, 하나라도 간과하면 예상 외 방식으로 실패한다.
좋은 아키텍처를 만드는 일은 객체 지향 설계 원칙을 이해하고 응용하는 데에서 출발한다. 그럼 대체 객체 지향이란 무엇인가?
함수형 프로그래밍이라는 개념은 람다 계산법(알론조 처치, 1930)이라는 형태로 프로그래밍보다 앞서 등장했다.
SOLID 원칙 중 SRP에 대해 알아보자.
소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 산출물을 변경해서는 안된다. 2장을 읽었다면 알겠지만, 이것이 소프트웨어 아키텍처를 공부하는 가장 근본적인 이유라고 할 수 있다.
LSP는 아키텍처 수준까지 확장할 수 있고, 다양한 문제를 방지하기 위해서 반드시 확장해야 한다.
불필요한 짐을 실은 무언가에 의존하면 예상치 못한 문제에 빠질 수 있다.
DIP에서 말하는 유연성이 극대화된 시스템이란, 소스 코드 의존성이 추상에 의존하며 구체에는 의존하지 않는 시스템이다.