Clean Architecture Part 2: Programming Paradigm

tedlim23·2021년 7월 28일
0

구조적 프로그래밍

goto 문을 최대한 배제하면서 제어 흐름을 유지하는 방식.

현대의 프로그래밍은 기본적으로 모두 구조적 프로그래밍을 따르도록 되어있다.

컴퓨터 프로그래밍은 수학적 구조가 아닌 과학적 구조이다.

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

프로그램이 잘못되었음을 테스트를 통해 증명할 수는 있지만, 프로그램이 맞다고 증명할 수는 없다.

구조적 프로그래밍은 프로그램을 증명 가능한 세부 기능 집합으로 분해할 것을 강요한다.

즉, 구조적 프로그래밍의 가치는 프로그래밍에서 반증 가능한 단위를 만들어 낸다는 데에 있다.

객체 지향 프로그래밍

보통 객체 지향이 왜 좋은지를 물으면 캡슐화, 상속, 다형성에 대해 이야기 한다.

캡슐화는 소스 코드를 숨길 수 있음을 의미한다. 사실 오히려 C 에서는 이게 가능했는데 점점 더 많은 OOP 언어들이 이를 배제하면서 사실 OO 와 캡슐화는 맞지 않는 이야기다.

상속이란 단순히 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의하는 일이다. OO 언어가 있기 전에도 가능했지만 확실히 OO 가 더 기여한 바가 있는 것은 맞다.

다형성 (Polymorphism)

다형성의 근간은 함수를 호출하는 포인터의 테이블을 두고 이를 응용하는 것이다.

Plugin Architecture

코드를 작성할 때 입출력 장치가 바뀐다고해서 이에 맞게 다시 코드를 작성하거나 컴파일하는 일은 없다. 프로그램은 장치 독립적이어야 하고 플러그인 방식이 이러한 입출력 장치 독립성을 지원하기 위해 만들어졌다.

의존성 역전

다형성이 보편화 되기 전, 일반적인 호출 트리는 main 에서 고수준 함수를 호출하고 다시 중간 수준 함수를 호출하고 저수준 함수까지 내려가는 단방향 제어흐름을 따르는 방식이다.

여기에 다형성이 끼어들면, 소스코드의 의존성이 단방향으로 되지 않아도 된다. 호출을 하는 모듈이든 받는 모듈이든 의존성을 원하는 방향으로 설정할 수 있다.

고수준의 정책을 포함하는 모듈은 저수준의 세부사항을 포함하는 모듈에 대해 독립성을 보장할 수 있다.

함수형 프로그래밍

가변 변수와 불변 변수를 잘 분리해서 사용하자 (..?)

어떠한 변수도 갱신되지 않는다면 race condition 이라든가 deadlock 등등의 업데이트 문제가 발생하지 않는다.

불변성을 실현하기 위해서는 애플리케이션 내부의 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리하는 일이다.

책에선 더 이상 자세히 설명해주지 않는다 ㅠ

참조: https://sungjk.github.io/2017/07/17/fp.html

profile
인공지능과 금융생활에 관심이 많은 개발자입니다 ;)

0개의 댓글