본문 바로가기
  • SDXL 1.0 + 한복 LoRA
  • SDXL 1.0 + 한복 LoRA
Study/컴퓨터 공학

클린 아키텍처 #2

by 마즈다 2022. 1. 11.
반응형

2022.01.07 - [Study/컴퓨터 공학] - 클린 아키텍처

2022.01.18 - [Study/컴퓨터 공학] - 클린 아키텍처 #3

2022.02.15 - [Study/컴퓨터 공학] - 클린 아키텍처 #4

2022.03.02 - [Study/컴퓨터 공학] - 클린 아키텍처 #5

2022.05.16 - [Study/컴퓨터 공학] - 클린 아키텍처 #6

클린 아키텍처 : 2부 6장까지


 

저자 : 로버트 C. 마틴

출판 : 인사이트

출간 : 2019.08.20.


학습 방법 : 책을 읽고 소제목 단위로 핵심 내용을 1~3문장 정도로 요약

 


 

2부. 벽돌부터 시작하기: 프로그래밍 패러다임

4장. 구조적 프로그래밍

 

⦿ 증명

✓ 수학적 증명을 이용하여 프로그램이 올바름을 증명 

✓ 제어구조(if/then/else, do/while)는 좋은 방식의 goto 문임을 발견 

✓ 제어 구조는 순차, 분기, 반복으로 표현 가능 

 

⦿ 해로운 성명서

✓ 현대의 언어들은 제약 없는 제어흐름의 전환 방법을 제공하고 있지 않음 

✓ 따라서 현대의 개발자들은 모두 구조적 프로그래머라고 할 수 있음 

 

⦿ 기능적 분해

✓ 모듈을 기능적으로 더 작은 단위로 끊임없이 분해할 수 있음 

✓ 대규모 시스템을 모듈과 컴포넌트로 분리 가능해짐 

✓ 더 나아가 모듈과 컴포넌트도 입증 가능한 아주 작은 기능들로 세분화 할 수 있게 됨 

 

⦿ 엄밀한 증명은 없었다.

✓ 프로그램에 대한 수학적 증명은 과도한 작업으로 판명 

✓ 대안으로 과학적 방법을 선택 

 

⦿ 과학이 구출하다

✓ 과학에는 재연 가능하나 증명 불가능한 법칙들이 있다. 

✓ 수학은 증명 가능한 서술이 참임을 입증하는 원리라면 과학은 증명 가능한 서술이 거짓임을 입증하는 원리다. 

 

⦿ 테스트

✓ 구조적 프로그래밍은 프로그램을 증명 가능한 세부 집합으로 재귀적으로 분해한다. 

✓ 그리고나서 증명 가능한 기능들이 거짓인지를 증명하려고 시도한다(테스트). 

✓ 테스트에 실패하면 그 기능은 목표에 부합할만큼은 참이다. 

 

⦿ 결론

✓ 소프트웨어 아키텍트는 모듈, 컴포넌트, 서비스가 쉽게 반증 가능하도록(테스트하기 쉽도록) 만들기 위해 노력해야 한다. 



5장. 객체 지향 프로그래밍

 

⦿ 캡슐화?

✓ 데이터와 함수가 응집력 있게 구성된 집단을 서로 구분지을 수 있다. 

✓ 객체 지향이 아니더라도 캡슐화는 가능하다. 

✓ 오히려 객체 지향 언어들에서 캡슐화의 훼손이 심하다. 

 

⦿ 상속?

✓ 상속이란? 단순히 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의하는 일 

✓ 상속과 유사한 방법은 이전에도 있었으나 객체 지향 언어는 상속 기능을 편리하게 만들었다. 

 

⦿ 다형성?

✓ 함수를 가리키는 포인터를 응용한 것이 다형성이다. 

✓ 객체 지향 언어는 다형성을 조금 더 안전하고 편리하게 사용할 수 있도록 해준다(포인터 사용의 배제). 

 

⦿ 다형성이 가진 힘

✓ 입출력 장치의 독립성을 지원하기 위해 플러그인 아키텍처가 만들어짐 

 

⦿ 의존성 역전

✓ 제어의 흐름에서 벗어나 소스 코드의 의존성을 원하는 방향으로 설정할 수 있다. 

✓ 서로 독립된 컴포넌트를 개발 할 수 있어 배포 독립성, 개발 독립성을 이룰 수 있다. 

✓ 의존성 역전 : 상위 모듈이 하위 모듈에 의존해서는 안되며 하위 모듈이 상위 모듈에서 정의한 추상화(인터페이스)에 의존해야 한다.

 

⦿ 결론

✓ 객체 지향이란 다형성을 이용하여 전체 시스템의 모든 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력 



6장. 함수형 프로그래밍

 

⦿ 정수를 제곱하기

✓ 함수형 언어에서는 변수가 불변이다. 

 

⦿ 불변성과 아키텍처

✓ 변수의 가변성은 (프로세스와 스레드에서) 경합 조건, 교착상태 조건, 동시 업데이트 문제를 일으킨다. 

✓ 불변성은 시스템 자원 문제로 타협이 필요하다. 

 

⦿ 가변성의 분리(타협 1)

✓ 애플리케이션, 또는 애플리케이션 내부의 서비스를 가변 컴포넌트(변수를 변경하는 컴포넌트)와 불변 컴포넌트(변수를 변경하지 않는 컴포넌트)로 분리 

✓ 가능한 한 많은 처리를 불변 컴포넌트에 넣는 것이 좋다. 

 

⦿ 이벤트 소싱(탸협 2)

✓ 상태가 아닌 트랜잭션을 저장하는 전략 

✓ 트랜잭션 중 업데이트나 삭제는 없고 생성과 조회만 있다. 

✓ 소스코드 버전 관리 시스템이 동작하는 방식 

 

⦿ 결론

 구조적 프로그램은 제어흐름의 직접적인 전환에 부과되는 규율 

✓ 객체 지향 프로그램은 제어흐름의 간접적인 전환에 부과되는 규율 

✓ 함수형 프로그래밍은 변수 할당에 부과되는 규율 

✓ 컴퓨터 프로그램은 순차, 분기, 반복, 참조로 구성된다. 

 

반응형

'Study > 컴퓨터 공학' 카테고리의 다른 글

클린 아키텍처 #6  (0) 2022.05.16
클린 아키텍처 #5  (0) 2022.03.02
클린 아키텍처 #4  (0) 2022.02.15
클린 아키텍처 #3  (0) 2022.01.18
클린 아키텍처  (0) 2022.01.07