본문 바로가기

Etc

[클린 아키텍처] 프로그래밍 패러다임

패러다임

- 패러다임이란 프로그래밍을 하는 방법
- 어떤 프로그래밍 구조를 사용할지, 언제 이 구조를 사용해야하는지를 결정
- 언어에 독립적
- 구조적, 객체 지향, 함수형 프로그래밍 세 종류가 있다.

 


 

구조적 프로그래밍

- 초기 프로그래밍은 많은 세부상들을 검증을 하기 위해 작은 단위로 분해하려했다.
- 하지만 goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는것을 발견
- 그 중 if, then, else, do, while 과 같은 분기와 반복 제어문은 검증가능한 단위로 재귀적으로 세분화
- 즉 거대한 기획에 대해 고수준의 기능들로 분해하고 다시 각 기능을 저수준의 함수들로 분해할 수 있게 되었다.
- 또한 세분화된 기능들의 테스트가 용이해졌다.

 


 

객체 지향 프로그래밍

-  캡슐화, 상속, 다형성 세 가지 요소를 지원하는 프로그래밍

캡슐화

- 데이터와 함수 등을 외부에는 은닉되고 일부만 노출할 수 있다.
- c 언어에서는 완전한 캡슐화를 구현할 수 있지만 자바와 C#은 헤더와 구현체를 분리하는 방식으로 인해 캡슐화를 훼손하여 클래스 선언과 정의를 구분하는게 불가능해졌다.

상속

- 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의하는 일
- 객체 지향 언어가 아닌 언어에서도 상속은 구현 가능하나 객체 지향 언어에서는 더 편리한 방식으로 제공

다형성

- 기존의 프로그래밍에서는 함수에 대한 포인터를 직접 사용하여사용하였고 초기화 등 프로그래머의 실수로 문제가 생길 요지가 많지만 객체 지향 프로그래밍에서는 다형성을 더 안전하고 편리하게 사용할 수 있도록 해준다.
- 다형성을 통해 제어흐름을 간접적으로 전환할 수 있게되었다.
- 인터페이스를 사용하여 의존하는 클래스에 대해 의존성을 역전시킬 수 있다.
- 인터페이스를 구현하는 구현체는 사용하는 클래스의 플러그인처럼 사용이 가능
- 구현체의 코드가 변경되어도 사용클래스에는 무관하여 배포 독립성을 가지게된다.
- 독립적인 배포는 각 팀에서 모듈 개발 독립성을 가지게 된다.

 


 

함수형 프로그래밍

- 변수는 프로그램 실행 중 변할 수 있지만 함수형에서는 변수의 값이 변하지 않는다.
- 변수가 변하면 경합조건, 교착상태, 동시 업데이트 등의 문제가 발생할 수 있어 함수형 프로그밍은 이러한 문제로 부터 자유롭다.
- 위의 문제들은 동시성 애플리케이션에서 자주 발생
- 가능한 많이 불변 컴포넌트로 옮겨야 한다.
- 이벤트 소싱 아키텍처를 통해 이를 구현할 수 있다.

이벤트 소싱

- 상태가 아닌 트랜잭션을 저장하는 방식
- 읽기와 쓰기만을 수행하여 데이터의 변하는 상태를 모두 기록하고 최근의 상태 또는 그동안의 쌓인 데이터드를 종합하여 읽기의 데이터로 사용한다.
- 시간이 오래 지남에 따라 데이터가 많이 쌓이게 되면 성능저하가 될 수 있어 일정 개수 또는 일정 기간 마다 그동안의 데이터를 종합한 상태로 저장하여 조회 시 저장된 부분부터 조회를 하는 방법으로 처리할 수 있다.