구조적 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 이 세가지 패러다임은
무엇을 해서는 안되는지를 말해준다.
1. goto문
2. 함수 포인터
3. 할당문
구조적 프로그래밍
: 제어프흠의 직접적인 전환에 대해 규칙을 부과한다.
- goto문의 좋은 사용방식은 if/then/else 와 do/while 같은 분기와 반복이라는 단순한 제어구조이다.
객체 지향 프로그래밍 (OO)
: 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.
좋은 아키텍처를 만드는 일은 객체지향 설계 원칙을 이해하고 응용하는 데서 출발한다.
- 객체지향은 캡슐화, 상속, 다형성을 반드시 지원해야한다.
캡슐화
: 데이터와 함수가 응집력있게 구성된 집단을 서로 구분 짓는다. -> 구분선 바깥에서 데이터는 은닉되고, 일부 함수만이 외부에 노출된다. (private 데이터, public 함수)
상속
: 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의한다.
다형성
: 전체 시스템의 모든 소스 코드 의존성에 대한 절대적인 제어가 가능하다
의존성의 역전
- 호출하는 모듈이든 받는 모듈이든 관계 없이 소스 코드 의전송을 원하는 방향으로 설정할 수 있다.
-> 컴포넌트는 개별적이며 독립적으로 배포 가능하다. (배포 독립성)
-> 시스템의 모듈을 독립적으로 배포가능하다면 서로 다른 팀에서 각 모듈을 독립적으로 개발 가능하다 (개발 독립성)
함수형 프로그래밍
: 할당문에 대해 규칙을 부과한다.
- 어플리케이션을 제대로 구조화 하려면 변수를 변경하는 컴포넌트와 변경하지 않는 컴포넌트를 분리해야한다.
- 이벤트 소싱: 상태가 아닌 트랜잭션을 저장하는 전략, 상태가 필요해지면 단순히 상태의 시작점으로 부터 모든 트랜잭션을 처리
- 데이터 저장공간과 처리능력이 충분하면 어플리케이션이 완전한 불변성을 갖도록 만들 수 있고, 완전한 함수형으로 만들 수 있다.
- ex) 은행게좌 잔고 계산, 소스 코드 버전 관리 시스템
기존 예제
ex) 사용자가 온라인 서점에서 책을 주문한다고 가정해 볼게요. 1번 책을 구매하고 싶어서 주문을 생성하고, 2번 책도 한번에 주문하려고 추가하게 되었어요. 다시 생각해보니 1번 책은 구매할 필요가 없어서 주문에서 삭제하게 되었죠. 이 상황에서 기존의 데이터 저장 방식이라면, 최종적으로 주문하게 되는 2번 책만 최종 값으로 저장하게 됩니다.
-> 이벤트 소싱 예제
ex) 같은 상황에서 이벤트 소싱은, 이벤트 자체를 데이터로 저장하게 됩니다. “사용자가 1번 책을 추가하여 주문을 생성한다.”, “2번 책을 주문에 추가한다”, “1번 책을 주문에서 삭제한다.” 라는 이벤트 자체가 저장되는 방식이죠. 그래서 이벤트 소싱에서는 UPDATE 혹은 DELETE의 개념이 없어요.
이벤트 소싱 개념 참조
'클린아키텍처' 카테고리의 다른 글
[클린아키텍처] 17장 경계: 선긋기, 18장 경계 해부학 (0) | 2022.03.10 |
---|---|
[클린아키텍처] 15장 아키텍처란?, 16장 독립성 (0) | 2022.03.06 |
[클린아키텍처] 12장~14장 컴포넌트 원칙 (0) | 2022.03.06 |
[클린아키텍처] 7장~11장 설계원칙 - SOLID 원칙 (0) | 2022.02.27 |
[클린아키텍처] 1장 설계와 아키텍처란? 2장 두가지 가치에 대한 이야기 (0) | 2022.02.27 |
댓글