독립성
16. 독립성 좋은 아키텍처는 다음을 지원해야 한다. 시스템의 유스케이스 시스템의 운영 시스템의 개발 시스템의 배포 유스케이스 시스템의 아키텍처는 시스템의 의도를 지원해야 한다. 아키텍처는 시스템의 행위에 그다지 큰 영향을 주지 않는다. 행위를 명확히 하고 외부로 드러내며, 이를 통해 시스템이 지닌 의도를 아키텍처 수준에서...
16. 독립성 좋은 아키텍처는 다음을 지원해야 한다. 시스템의 유스케이스 시스템의 운영 시스템의 개발 시스템의 배포 유스케이스 시스템의 아키텍처는 시스템의 의도를 지원해야 한다. 아키텍처는 시스템의 행위에 그다지 큰 영향을 주지 않는다. 행위를 명확히 하고 외부로 드러내며, 이를 통해 시스템이 지닌 의도를 아키텍처 수준에서...
15. 아키텍처란? 소프트웨어 아키텍트는 프로그래머이며, 앞으로도 계속 프로그래머로 남는다. 소프트웨어 아키텍트는 최고의 프로그래머이며, 앞으로도 계속 프로그래미 작업을 맡은 뿐만 아니라 동시에 나머지 팀원들이 생산성을 극대화할 수 있는 설계를 하도록 방향을 이끌어 준다. 소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의...
14. 컴포넌트 결합 ADP: 의존성 비순환 원칙(Acyclic Dependencies Principle) 컴포넌트 의존성 그래프에 순환이 있어서는 안 된다. 많은 개발자가 동일한 소스 파일을 수정하는 환경에서 문제 발생 해결책: 주 단위 빌드, 순환 의존성 제거 주 단위 빌드(Weekly Build) 5일 중 4일 동안 각자 개발/1일 동...
13. 컴포넌트 응집도 REP: 재사용/릴리스 등가 원칙 (Reuse/Release Equivalence Principle) 재사용 단위는 릴리스 단위와 같다 릴리스 번호가 없다면 재사용 컴포넌트들이 서로 호환되는지 보증할 방법이 없다. 릴리스 절차에는 적절한 공지와 함께 릴리스 문서 작성도 포함되어야 한다. 컴포넌트를 구성하는 모든 모듈은 ...
12. 컴포넌트 컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위 여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성 가능 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다. 컴포넌트의 간략한 역사 개발 초창기에는 메모리에서의 프로그램 위치와 레이아웃을 프로그래머가...
11. DIP: 의존성 역전 원칙 유연성이 극대화된 시스템이란 소스코드 의존성이 추상(abstract)에 의존하며, 구체(concretion)에 의존하지 않는 시스템 자바와 같은 정적 언어에서는 오직 인터페이스나 추상 클래스 같은 추상적인 선언만 참조해야 한다는 뜻 동적 타입 언어에도 동일한 규칙 적용 소프트웨어 시스템이라면 구체적인 많은 장치...
9. LSP: 리스코프 치환 원칙 상속을 사용하도록 가이드하기 애플리케이션의 행위가 하위 타입 중 무엇을 사용하는지에 대해 전혀 의존하지 않음 -> LSP 준수 정사각형/직사각형 문제 LSP를 위반하는 전형적인 문제 Square는 Rectangle의 하위 타입으로는 적합하지 않음 Rectangle의 높이와 너비는 서로 독립적으로 변경될...
8. OCP: 개방-폐쇄 원칙 소프트웨어 개체는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 사고 실험 소프트웨어 아키텍처가 훌륭하다면 변경되는 코드의 양이 가능한 한 최소화 됨 서로 다른 목적으로 변경되는 요소를 적절하게 분리하고, 이들 요소 사이의 의존성을 체계화함으로써 변경량을 최소화 가능 아키텍트는 기능이 어떻게, 왜, 언...
7. SRP: 단일 책임 원칙 단 하나의 일만 해야 한다는 원칙은 SRP가 아님(헷갈림 주의!) 단일 모듈은 변경의 이유가 하나, 오직 하나뿐이여야 한다 하나의 모듈은 하나의, 오직 하나의 사용자 또는 이해관계자에 대해서만 책임져야 한다. 하나의 모듈은 하나의, 오직 하나의 액터에 대해서만 책임져야 한다. 모듈은 단순히 함수와 데이터 구조로 ...
6. 함수형 프로그래밍 정수를 제곱하기 자바 프로그램은 가변 변수를 사용하는데, 함수형 프로그래밍에서는 가변 변수를 사용하지 않는다. 함수형 언어에서 변수는 변경되지 않는다. 불변성과 아키텍처 경합(race) 조건, 교착상태(deadlock), 동시 업데이트(concurrent update) 문제가 모두 가변 변수로 인해 발생 동시성 애플리...