개발 도서/Clean Architecture

단일 책임 원칙은 함수는 단 하나의 일만 해야 한다는 원칙이 아니라 사실은 "단일 모듈은 변경의 이유가 하나, 오직 하나뿐이어야 한다." 라는 의미이다. 우발적 중복 단일 책임 원칙을 위반하는 대표적 사례인 우발적 중복을 살펴보자. Employee 클래스가 아래 세 가지 메서드를 가지고 있다. calculatePay() : 회계팀에서 기능을 정의하며, CFO 보고를 위해 사용 reportHours() : 인사팀에서 기능을 정의하며, COO 보고를 위해 사용 save() : 데이터베이스 관리자가 기능을 정의하며, CTO 보고를 위해 사용 calulatePay() 메서드와 reportHours() 메서드가 업무 시간을 계산하는 regularHours() 메서드를 동시에 사용한다고 했을때 CFO 팀에서 업무 ..
함수형 프로그래밍이라는 개념은 프로그래밍보다 먼저 등장했다. 정수를 제곱하기 자바 언어에서 25까지 정수 제곱을 출력하려면 아래처럼 코드를 작성하면 된다. public class Squint { public static void main(String args[]) { for (int i = 0; i < 25; i++) { System.out.println(i*i); } } } 함수형 언어인 클로저는 아래와 같다. (println (take 25 (map (fn [x] (* x x)) (range)))) 위의 코드를 쪼개보면 (println (take 25 (map (fn [x] (* x x)) (range)))) 자바에서는 가변 변수인 i를 사용하지만 클로저에서는 가변 변수가 전혀 없다. 가변 변수처럼 ..
좋은 아키텍처를 만드는 일은 객체 지향 설계 원칙을 이해하고 응용하는 데서 출발한다. 객체 지향이란? 데이터와 함수의 조합 실제 세계를 모델링하는 방법 캡슐화 상속 다형성 캡슐화? OO가 데이터와 함수를 쉽게 캡슐화하는 방법을 제공한다고 말하는데, 이는 잘못된 설명이다. OO를 기반으로 설계되지 않은 C 언어에서 오히려 더 완벽한 캡슐화를 제공한다. point.h struct Point; struct Point* makePoint(double x, double y); double distance(struct Point* p1, struct Point* p2); point.c #include "point.h" #include #include struct Point { double x, y; }; struc..
구조적 프로그래밍은 데이크스트라라는 네덜란드 프로그래머에 의해 만들어졌다. 증명 데이크스트라는 프로그래밍에도 수학의 증명을 도입하려고 했다. 프로그래머가 검증된 구조를 사용해 코드를 작성하여 이 코드가 올바르다는 사실을 스스로 증명하게 만드려고 했다. 이런 과정에서 goto 문은 단순 반복문/조건문으로 대체할 수 있다는 것을 발견했다. goto 문을 사용하면 증명을 하기가 어렵지만, 반복문/조건문은 세부 단위로 쪼갤 수 있고, 따라서 증명을 하기가 더 쉽다. 모든 프로그램을 순차, 분기, 반복이라는 세 가지 구조만으로 표현할 수 있다는 사실을 증명했다. 해로운 성명서 데이크스트라는 "goto문의 해로움"이라는 제목의 글을 썼고, 여기에 많은 사람들이 지지와 반대를 보냈다. 현재 살펴보면 goto 문은 코..
이 장에서는 세 가지 패러다임인 구조적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍에 대해 다룬다. 구조적 프로그래밍 구조적 프로그래밍은 최초로 적용된 패러다임으로 goto 문은 if / then / else 와 do / while / until 문으로 대체해야 한다는 것이다. 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 객체 지향 프로그래밍 객체 지향 프로그래밍은 함수 호출 스택 프레임을 힙으로 옮기면 지역 변수가 오랫동안 유지될 수 있음을 발견하고 만들어졌다. 이런 함수가 생성자가 되었고, 지역 변수는 인스턴스 변수, 중첩 함수는 메서드가 되었다. 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장했다. 객체 지향 프로그래밍은 제어흐름의 간접..
소프트웨어 시스템은 이해관계자에게 행위와 아키텍처를 제공한다. 행위 이해관계자가 요구한 내용을 만족하는 코드를 작성하는 것을 행위라고 한다. 요약하자면 행위는 기능이다. 이들은 요구사항을 기계에 구현하고 버그를 수정하는 일이 자신의 직업이라고 믿는다. 슬픈 일이지만 그들은 틀렸다. 아키텍처 소프트웨어는 부드러운 제품이다. 언제나 변경이 가능하고 유연해야 한다. 소프트웨어 개발 비용 증가는 변경사항의 범위에 달려있는데, 변경사항이 클수록, 시간이 오래 지날수록 개발 비용은 증가한다. 아키텍처는 변경하기 어려운 부분. 소프트웨어 큰 틀이라고 이해할 수 있다. 문제는 당연히 시스템 아키텍처다. 아키텍처가 특정 형태를 다른 형태보다 선호하면 할수록, 새로운 기능을 이 구조에 맞추는 게 더 힘들어진다. 따라서 아..
목표 좋은 소프트웨어 설계 목표는 필요한 시스템을 만들고 유지보수하는데 최소한의 비용과 인력이 투입되는 것이다. 만약 새로운 기능이 추가되는데 점점 더 많은 인력 또는 비용과 시간이 필요하다면 무언가 잘못되고 있는 것이다. 사례 연구 엉망진창이 되어 가는 신호 시스템을 급하게 만드는 것 코드와 설계의 구조를 깔끔하게 만들려는 생각을 전혀 하지 않을 경우 무엇이 잘못되었나? 현대의 개발자도 이와 비슷한 경주를 하며, 토끼와 유사한 과신을 드러낸다. 물론 개발자가 잠을 자는 것은 아니다. 오히려 정반대다. 현대의 대다수 개발자는 뼈 빠지게 일한다. 하지만 그들의 뇌는 잠에 취해 있다. 훌륭하고 깔끔하게 잘 설계된 코드가 중요하다는 사실을 알고 있는 바로 그 뇌가 잠자고 있다. 시장에 출시하는 것이 먼저니까 ..
Chamy619
'개발 도서/Clean Architecture' 카테고리의 글 목록 (3 Page)