클린 아키텍처를 읽으며 정리한 내용입니다.
다익스트라가 처음 인식한 문제 → 프로그래밍은 어렵고, 프로그래머는 프로그래밍을 잘 하지 못한다.
단순한 프로그램도 복잡한 세부사항을 담고 있고, 하나라도 간과하면 예상 외 방식으로 실패
증명이라는 수학적 원리를 이용해 해결해보자!
→ 프로그래머가 입증된 구조를 이용하고, 이 구조를 코드와 결합시키며 코드가 올바르다는 사실을 스스로 증명하게 되는 방식
단순한 알고리즘에 대해 기본적인 증명을 작성할 수 있어야 함. (힘들다..)
연구를 진행하며 발견한 사실: goto문이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다
모듈을 분해할 수 없게 되면 분할 정복 접근법으로 증명할 수도 없다
반면 goto문의 좋은 사용 방식은 모듈을 분해할 때 문제가 되지 않음
→ if/then/else, do/while 같은 분기와 반복
위와 같은 제어 구조는 순차 실행과 결합했을 때 특별해진다
모듈을 증명 가능하게 하는 바로 그 제어 구조가 모든 프로그램을 만들 수 있는 제어구조의 최소 집합과 동일!
→ 구조적 프로그래밍의 탄생
그럼 프로그램을 어떻게 증명할 수 있을까?
순차 구문: 단순한 열거법을 이용해 입력부터 출력까지 수학적으로 추적
분기: 분기를 통한 각 경로를 열거한 후 순차 구문과 같이 추적
반복: 1의 경우가 올바름을 증명하고, N의 경우가 올바르다고 가정한 후 N+1의 경우도 증명하는 귀납법 사용
→ 이렇게 프로그램도 증명할 수 있게 되는 것 같았지만. . .