일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Java
- 전화번호 목록
- 알고리즘
- H-index
- 커링
- @Getter
- 다리를 지나는 트럭
- 기능개발
- 모던 자바 인 액션
- 가장 큰 수
- 영속 자료구조
- K번째수
- 쿠버네티스
- 스택/큐
- @configuration
- 정렬
- 프로그래머스
- 검색 기능 확장
- 루씬 인 액션
- 크론 표현식
- 해시
- 고차원 함수
- @Setter
- 롬복 어노테이션
- 완주하지 못한 선수
- 스프링 스케쥴러
- @Data
- kubenetes
- 코딩 테스트
- @EnableScheduling
- Today
- Total
목록클린 아키텍처 (15)
Today I Learned
15장. 아키텍처란? 소프트웨어 시스템의 아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태이다. 그 모양은 시스템을 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 서로 의사소통하는 방식에 따라 정해진다. 그리고 그 형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽게 개발, 배포, 운영, 유지보수되도록 만들어진다. 이러한 일을 용이하게 만들기 위해서는 가능한 한 많은 선택지를, 가능한 한 오래 남겨두는 전략을 따라야 한다. 시스템 아키텍처는 시스템의 동작 여부가 아닌 배포, 유지보수가 원할하도록 해야한다. 아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화하는 것이다. 개발 잘 정의된 컴포넌트나 인터페이스 없이 개발을 시작한..
14장. 컴포넌트 결합 지금부터 다룰 세 가지 원칙은 컴포넌트 사이의 관계를 설명한다. 이 장에서도 마찬가지로 개발 가능성과 논리적 설계 사이의 균형을 다룬다. ADP : 의존성 비순환 원칙 컴포넌트 의존성 그래프에 순환(cycle)이 있어서는 안된다. 많은 개발자가 동일한 소스 파일을 수정하는 환경에선 누군가가 마지막으로 수정한 코드 때문에 망가진 부분을 다시 동작하도록 만들기 위해 코드를 수정하고 또 수정하는 작업이 빈번하게 발생할 수 있다. 다음은 이러한 문제에 대한 해결책이다. 주 단위 빌드(Weekly Build) 개발자가 모두 코드를 개인적으로 복사하여 작업하고, 매주 금요일마다 변경된 코드를 모두 통합하여 시스템을 빌드한다. 이 방식은 5일 중 4일동안 개발자를 고립된 세계에서 살 수 있게 ..
SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 설명해준다. 컴포넌트는 무엇인가? 컴포넌트를 구성하는 요소는 무엇인가? 컴포넌트를 결합하여 시스템을 구성하는 방법 12장. 컴포넌트 컴포넌트 : 배포 단위. 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위 (ex. 자바의 jar 파일, 루비의 gem 파일, 닷넷의 DLL) 컴파일형 언어 - 바이너리 파일의 결합체가 컴포넌트 인터프리터형 언어 - 소스 파일의 결합체가 컴포넌트 컴포넌트는 .war와 같은 단일 아카이브, .jar나 .dll같은 동적 로드 플러그인, .exe 같은 실행파일 등으로 배포할 수 있다. 컴포넌트가 어떤 형태로 배포되든, 독립적으로 개발, 배포 가능하도록 설계해야한다. 컴..
9장. LSP : 리스코프 치환 원칙 리스코프는 하위타입을 다음과 같이 정의했다. S 타입의 객체 o1 각각에 대응하는 T 타입 객체 o2가 있고, T 타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위 타입이다. 정사각형/직사각형 문제 LSP를 위반하는 전형적인 문제로 유명한 정사각형/직사각형 문제가 있다. Rectangle은 높이와 너비가 서로 독립적으로 변경될 수 있는 반면, Square는 높이와 너비가 반드시 함께 변경되야한다. 따라서 Square는 Rectangle의 하위타입으로는 적합하지 않다. LSP 위반을 막기 위해서는 (if문 등을 이용해서)Rectangle이 실제로는 Square인지 검사하는 매커니즘을 User에 ..