프로그램 언어/C

[2.1장] C - 구조적 프로그래밍이란

박가방 2022. 8. 6. 10:38

 

1. 구조적 프로그래밍의 기법

: 프로세스 지향적인 관점에서 프로그래밍하는 전통적인 방법(절차식 프로그래밍이라고도 불림)

파스칼, C언어 등

(절대 객체 지향의 반대 개념이 아니다. 파이썬은 객체, 절차 두가지 특성을 모두 갖는다)

 

1) 등장 배경

1969년, 네들란드의 다이그스트라(Dijkstra Edisgai) 교수에 의하여 처음 소개된 것,

GOTO문의 결점을 제거하고자 하는 데에서 출발함.

 

(1) GOTO 문의 결점 3가지

첫째 : GOTO문은 무조건 분기를 지시하는 저급의 제어 구조이므로 DO WHILE문 이나

CASE문 등과 같은 블록의 개념을 갖지 못한다.

둘째 : GOTO문은 프로그램의 흐름을 복잡하게 만들어, 작성된 프로그램의 제어 구조를

이해하기가 어렵다.

셋째 : GOTO문은 동적 처리와 프로그램의 정적 표현의 차이가 커서 프로그램의 구조를

불 분명하게 만든다.

 

따라서, GOTO 문을 사용하여 작성한 프로그램은 실행의 흐름을 파악하는 것이 프로그램의

읽는 순서와 다르기 때문에, 프로그램의 자체를 이해하기 어렵다.

 

 

(2) 비구조적인 방법 프로그래밍 기법의 단점

① 설계 단계 : 순서도를 작성하는 일 자체가 어렵고, 작성된 순서도의 검증이나 수정이 어렵다.

② 순서도 작성 단계 : 주요 부분을 빠뜨리기 쉽고, 논리적 오류를 범할 우려가 있다.

③ 검사 단계 : 오류의 발견시 그 원인을 밝혀 수정하기 위해 프로그램 전체를 조사하여야

하므로, 많은 시간과 노력을 필요로 하게 된다.

 

(3) 구조적 프로그래밍 기법의 특성

① 프로그램을 읽고 이해하기 쉬워야 한다.

② 프로그램의 개발 및 유지, 보수의 효율성을 높일 수 있어야 한다.

③ 프로그래밍에 대한 신뢰성을 가질 수 있어야 한다.

④ 프로그래밍에 대한 규칙이 제공되어야 한다.

⑤ 프로그래밍에 소요되는 시간과 노력이 감소되어야 한다.

 

2) 개 념

(1) 구조적 프로그램이란

① 프로그램의 흐름이 복잡해지는 것을 막음.

② 주 프로그램을 구성하는  요소를 다루기 쉽도록 보다 작은 규모로 조직화 함.

③ 구조적 프로그램은 단일 입·출구(single entry, single exit)를 가지게 함

 가능한 GOTO 문은 사용하지 않게 한다.

⑤ 순차, 선택, 반복 논리의 세가지 논리 구조만으로 구성한다.

 순차 구조(sequence) : 하나의 일이 수행된 후 다음의 일이 순서적으로 수행된다.

 선택 구조(selection) : 어떤 조건이 만족되면 then 다음의 일이 수행되고,

그렇지 않은 경우에는 else 다음의 일이 수행된다.

 반복 구조(repetition) : 어떤 조건이 만족될 때까지는 특정 일이 반복 수행된다.

 

(2) 프로그램 형태와 코딩 절차에 관한 구조적 프로그래밍의 기본적 개념

(좁은 관점) ⇒ 구조적 코딩

① GOTO 문이 없는 프로그램

② 순차, 선택, 반복의 논리 구조만을 사용하는 프로그래밍

③ 구조적 프로그램의 형태

④ 구조적 코딩

 

(3) 프로그램 방법에 관한 구조적 프로그래밍의 기본적 개념

(넓은 관점) ⇒ 구조적 기법

① 모듈화 프로그래밍

② 단계적 상세화

③ 하향식 프로그래밍

 구조적 기법 ▶

프로그램의 형태, 프로그램의 설계, 프로그램의 코딩, 프로그램 시스템에 구조와

규율을 적응시키는 방법론으로서 계층적인 순서로 구성하게 하고, 표준화된 제어 구조를

사용할 모듈화 프로그래밍을 가능하게 하는 기법이다.

 

 

 

 

 

 

 

 

 

TMI(위키백과).

 

20세기 이후

프로그래머가 경험을 쌓을수록 엄격한 의미의 구조적 프로그래밍을 침해하는 어떤 부분이 있는지를 이해하기가 쉽다는 것을 알았고, 널리 퍼진 몇몇 프로그래밍 언어들은 직접적인 분기문을 제한하고 있으며 예외처리를 이런 상황에서 사용할 수 있게 하고 있다. 주요한 산업용 언어들은 자바와 같은 언어들을 제외하고는 프로시저 내에서의 직접 분기를 위하여 GOTO문을 여전히 유지하고 있다.

 

현대적 가치

구조적 프로그래밍은 프로그래머의 습관을 바꾸었다. 프로그램의 정확성을 증명하는 문제를 떠나서 데이크스트라가 그의 논문에서 말한 대로 시간에 따라 변하는 동적인 과정을 시각화하는 것은 인간에게 매우 어려운 일이다. 꼭 GOTO문만의 문제가 아니라 구조화된 흐름 제어문을 사용한다고 할지라도 너무 복잡하게 중첩되어 있거나 스코프의 길이가 너무 긴 코드를 작성한다거나 너무 긴 길이의 하위프로그램을 작성하는 일을 가급적 피하게 경향이 생겼다. 그리고 이런 습관은 다른 사람이 작성한 프로그래밍 코드를 쉽게 이해하는 데 도움을 준다.

 

출처 1 : http://www.ktword.co.kr/test/view/view.php?m_temp1=2665

출처 2 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=setreuid&logNo=220287691965

출처 3 : https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%A1%B0%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D