Search
Duplicate
💈

클린아키텍처 요약 (3, 4, 5, 6장)

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
개발지식
CS
Architecture
Scrap
태그
9 more properties
세가지 프로그래밍 패러다임은 프로그래머에게서 권한을 박탈한다. 프로그램은 순차, 분기, 반복, 참고로 구성된다.

구조적 프로그래밍 → 함수

구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다.
goto 문의 무분별한 흐름 이동 X
go to문 → if/then/else 또는 do/while/until 같은 구조로 대체
모듈을 더 작은 모듈로 나누는데 goto문은 문제를 일으킴 → 유클리드 계층 구조로 분리 불가능
현대의 언어는 goto 문이 거의 사라짐 (java의 break나 예외처리가 goto랑 비슷할 수는 있지만 제약이 있다는 점이 다름. 이전은 굉장히 자유롭게 흐름이동이 가능했음)
구조적 프로그래밍을 통해 기능을 더 작은 기능으로 끊임없이 분해 가능

객체 지향 프로그래밍 → 컴포넌트 분리

객체 지향 프로그래밍은 제어 흐름의 간접적인 전환에 대해 규칙을 부과한다.
함수 호출 스택 프레임을 힙으로 옮기면 함수 호출이 반환된 이후(함수가 종료된 이후)에도 지역 변수가 오랫동안 유지될 수 있음 → 클래스의 생성자
지역 변수 → 인스턴스 변수, 중첩 함수 → 메서드
함수 포인터 특정 규칙에 따라 사용하는 과정을 통해 → 다형성이 등장
캡슐화
데이터가 은닉되고 일부 함수를 통해 이를 사용할 수 있다
C++에서 클래스를 헤더 파일에 선언할 것이 요구됨(c++ 컴파일러는 클래스의 인스턴스 크기를 알 수 있어야 함.) → 사용자가 헤더파일에서 클래스 내부의 데이터를 확인할 수 있으므로 은닉성이 깨짐
상속
원래도 c로 상속 비슷하게 흉내내며 살고 있음. 하지만 c++과 자바에서 휠씬 자유롭게 사용가능.
다향성
하나의 객체가 여러가지 타입을 가질 수 있음
의존성 역전 : 저수준 함수가 고수준 함수를 호출가능
다형성을 안전하고 편리하게 제공한다 → 소스 코드 의존성을 어디에서든 역전시킬 수 있다
소스 코드 의존성을 원하는 방향으로 설정 가능
배포 독립성 : 코드 변경이 된 컴포넌트만 다시 배포할 수 있음
개발 독립성 : 서로 다른 팀에서 각 모듈을 독립적으로 개발 가능
저수준의 세부사항 모듈 → 중요도가 낮은 플로그인 모듈, 고수준의 정책을 포함한 모듈 → 독립적으로 개발 배포

함수형 프로그래밍 → 데이터 관리

함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.
람다 계산법의 영향을 받아 만들어짐
불변성 : 심볼의 값이 변경되지 않는다는 개념 → 함수형 언어에는 할당문이 전혀 없다는 뜻
자바에서는 가변 변수(프로그램 실행 중 상태가 변할 수 있음)를 사용
for (int i = 0; i < 5; ++i) <- i가 가변 변수
C++
복사
but 함수형은 변수가 변경되지 않음!
경합(rare)조건, 교착상태(deadlock)조건, 동시 업데이트(concurrent update) 문제는 가변 변수로 인해 발생
다수의 스레드와 프로세스를 사용하는 애플리케이션에서 마주치는 모든 문제는 가변 변수가 없다면 존재하지 않는다.
저장 공간이 무한하고 프로세서의 속도가 무한히 빠르면 불변성이 실현 가능하다.
가변 컴포넌트와 불변 컴포넌트(순수하게 함수형 방식, 어떠한 가변 변수도 불허)로 분리
트랜잭션 메모리와 같은 실천법을 사용하여 동시 업데이트와 경합 조건 문제로부터 가변 변수 보호
이벤트 소싱 : 상태가 아닌 트랜젝션을 저장하자는 전략
결론적으로 프로그램은 CRUD가 아니라 CR만 수행 like 코드 버전 관리 툴