[도서] clean architecture 3-4/34

이전 글 :

3장 패러다임 개요

구조적 프로그래밍

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

객체 지향 프로그래밍

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

함수형 프로그래밍

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


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

4장 구조적 프로그래밍

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

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


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

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

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

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

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

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

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

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

Sort:  

[광고] 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]

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

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 62567.98
ETH 2460.02
USDT 1.00
SBD 2.62