[도서] clean architecture 3-4/34

in hive-101145 •  2 years ago 

이전 글 :

3장 패러다임 개요

구조적 프로그래밍

제어흐름의 직접적인 전환에 대해 규칙을 부과

객체 지향 프로그래밍

객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과

함수형 프로그래밍

함수형 프로그래밍은 할당문에 대해 규칙을 부과


각 패러다임은 무엇을 해야 할지를 말하기 보다는 무엇을 해서는 안 되는지를 말해준다.

4장 구조적 프로그래밍

  • 공리(axiom) : 증명없이 참으로 받아들이는 명제

ex) 두 점이 주어졌을 때, 두 점을 지나는 직선이 단 하나 존재한다.


데이크스트라는 증명(proof)이라는 수학적인 원리를 적용하여 문제를 해결하고자 했고, 공리, 정리, 따름정리, 보조정리로 구성되는 유클리드 계층구조를 만들고자 하였다.

  • goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는 것을 발견
  • goto 문의 "좋은" 사용 방식은 if/then/else 와 do/while 과 같은 분기와 반복이라는 단순한 제어 구조에 해당한다는 사실을 발견
  • 모든 프로그램을 순차(sequence) / 분기(selection) / 반복(iteration) 이라는 세 가지 구조만으로 표현할 수 있다는 사실을 증명

컴퓨터가 진화하면서 goto 문장은 계속 뒤편으로 밀려나 거의 사라졌다. 자바의 경우, break 문이나 exception 이 goto 문과 유사하다는 것을 지적할 수 있다.

모듈은 기능적으로 분해 할수 있음을 뜻했다. 즉 거대한 문제 기술서를 받더라도 문제를 고수준의 기능들로 분해할 수 있다. 그리고 이들 각 기능은 다시 저수준의 함수들로 분해할 수 있고, 이러한 분해 과정을 끝없이 반복할 수 있다. 게다가 이렇게 분해한 기능들은 구조적 프로그래밍의 제한된 제어 구조를 이용하여 표현할 수 있다.

이들 기법을 사용하면 프로그래머는 대규모 시스템을 모듈과 컴포넌트로 나눌 수 있고, 더 나아가 모듈과 컴포넌트는 입증할 수 있는 아주 작은 기능들로 세분화 할 수 있다.

소프트웨어는 과학과 같다. 최선을 다하더라도 올바르지 않음을 증명하는 데 실패함으로써 올바름을 보여주기 때문이다.

구조적 프로그래밍이 오늘날까지 가치 있는 이유는 프로그래밍에서 반증 가능한 단위를 만들어 낼 수 있는 바로 이 능력 때문이다.

가장 작은 기능에서부터 가장 큰 컴포넌트에 이르기까지 모든 수준에서 소프트웨어는 과학과 같고, 따라서 반증 가능성에 의해 주도된다. 소프트웨어 아키텍트는 모듈, 컴포넌트, 서비스가 쉽게 반증 가능하도록 ( 테스트하기 쉽도록 ) 만들기 위해 분주히 노력해야 한다. 이를 위해 구조적 프로그래밍과 유사한 제한적인 규칙들을 받아들여 활용해야 한다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

@wonsama transfered 2 KRWP to @krwp.burn. voting percent : 66.17%, voting power : 19.69%, steem power : 2002823.34, STU KRW : 1200.
@wonsama staking status : 1793.429 KRWP
@wonsama limit for KRWP voting service : 1.793 KRWP (rate : 0.001)
What you sent : 2 KRWP
Refund balance : 0.207 KRWP [65939156 - bfafe26e25de9b007e2e8db097439b0b3d28c85a]

image.png

Upvoted! Thank you for supporting witness @jswit.
default.jpg