[Clean Architecture] 클린아키텍처란? — 1편

JB
3 min readDec 26, 2021

--

아키텍처란?

  • 패러다임을 지배하는 구조
  • 소프트웨어는 소프트웨어(더 작은 소프트웨어 컴포넌트)로 구성
  • 재귀적이고 프랙털 구조
  • 구성요소를 정렬하고 조립하는 방법에 관한 규칙

좋은 아키텍처란?

  • 사용자, 개발자, 소유자의 요구를 특정 시점에도 반드시 충족
  • 시간이 흐르더라도 계속 충족
- 소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화하는데 있다.- 빨리 가는 유일한 방법은 제대로 가는 것이다.

아키텍처를 위해 투쟁하라!

  • 당신은 소프트웨어를 안전하게 보호해야 할 책임이 있고, 당신의 책무 중 하나이다
  • 충분히 투쟁하여 생산성을 높히도록 하자!

프로그래밍 패러다임

  • 프로그래밍을 하는 방법
  • 세 가지 종류 (구조적, 객체 지향, 함수형)
  • 세 가지 패러다임은 각각 goto문, 함수 포인터, 할당문을 빼앗아 간다
  • 세 가지 패러다임과 아키텍처의 세 가지 큰 관심사(함수, 컴포넌트 분리, 데이터 관리) 가 어떻게 연관되는지 주목

구조적 프로그래밍(Structured Programming)

  • 1968년 에츠허르 비버 데이크스트라가 발견
  • 무분별한 점프(goto 문장)보다 if/then/elsedo/while/until 와 같은 익숙한 구조로 대체
  • 직접적인 전환에 대해 규칙을 부과한다
  • 모듈을 증명 가능하게 하는 제어구조가 모든 프로그래밍을 만들 수 있는 제어 구조의 최소 집합과 동일
  • 모듈을 기능적으로 분해할 수 있고, 문제를 고수준의 기능들로 분해 가능. 이를 다시 저수준의 함수로 분해 가능하고, 이러한 분해작업은 끝없이 가능하다!
  • 증명 가능한 세부 기능 집합으로 재귀적으로 분해할 것을 강요

객체 지향 프로그래밍(Object Oriented Programming)

  • 데이터와 함수의 조합? 실제 세계를 모델링하는 새로운 방법?
  • 캡슐화(encapsulation), 상속(inheritance), 다형성(polymorphism)
  • 의존성 역전으로 소스 코드 의존성을 원하는 방향으로, 독립적을 관리
  • 배포 독립성, 개발 독립성
  • 저수준의 세부사항은 중요도가 낮은 플러그인 모듈로 만들 수 있고, 고 수준의 정책을 포함하는 모듈과는 독립적으로 개발 배포 가능

함수형 프로그래밍(Functional Programming)

  • 변수의 불변성 (낮은 경합조건, 교착상태, 동시 업데이트 side effect)
  • 가변성의 분리 (불변 컴포넌트에서는 순수하게 함수형 방식으로만 작업 처리)
  • 이벤트 소싱 (상태가 아닌 트랜잭션을 저장하자)

프로그래밍 패러다임에 대해 요약하면,

  • 구조적 프로그래밍은 제어흐름의 직접적인 전환에 부과되는 규율
  • 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 부과되는 규율
  • 함수형 프로그래밍은 변수 할당에 부과되는 규율
소프트웨어,컴퓨터 프로그램은 순차, 분기, 반복, 참조로 구성된다. 그 이상도 이하도 아니다.

2편에서는 설계원칙 (SOLID) 과 함께 찾아오도록 하겠습니다

--

--