Computer Science/Programming Paradigm

구조적 프로그래밍 Vs 비구조적 프로그래밍

JunOnJuly 2023. 10. 23. 18:23
728x90

구조적 프로그래밍


개념

구조적 프로그래밍은 절차적 프로그래밍 혹은 절차지향적 프로그래밍이라 불리는 패러다임의 하위 개념으로 볼 수 있는 프로그래밍 패러다임입니다. 비 구조적 프로그래밍의 문제점을 해결하고자 등장했으며 역사적으로 몇가지 다른 구조화 기법과 방법론이 개발되어왔는데, 가장 일반적인 세 가지는 다음과 같습니다.

잭슨의 구조적 프로그래밍
다익스트라의 구조적 프로그래밍
다익스트라의 관점에서 파생된 관점

하지만 대부분의 구조적 프로그래밍이라고 말하는 것은 첫 번째를 제외한 둘 중의 하나를 말하는 것인데, 일반적으로는 GOTO문을 없애거나 GOTO문에 대한 의존성을 줄여주는 것으로 유명합니다. 흐름제어를 사용하지 않기때문에 코드의 가독성이 좋고 유지보수가 쉬우며, 재사용성도 높습니다.

 

다익스트라는 Go To Statement Considered Harmful, Edsger W. Dijkstra, 1968년 이라는 논문을 썼을정도로 GOTO문 사용에 많이 언급했습니다. 위 논문을 통해 GOTO 만을 없애는게 아닌 프로그래머가 실수를 덜 하고 올바른 프로그램을 좀 더 쉽게 만들게 도와주는 것이 중요하다고 말하고 있습니다. 

규칙

구조적 프로그래밍을 크게 봤을 때와 작게 봤을 때로 나누어 볼 수 있습니다.

큰 범주에서 구조적 프로그래밍은큰 조각의 코드를 작은 하부 프로그램으로 나누어야 함 ex) 함수 프로시저...
전역변수는 거의 사용하지 않아야 하고 지역변수를 사용하거나 값이나 참조에 의한 인자를 받아야 함

같은 특성을 지니고 있고 작은 범주에서 구조적 프로그래밍은

순차 : 구문 순서에 따라 순서대로 수행
선택 : 상태에 다라 여러 구문들 중 하나를 수행 ex if then else endif switch case ...
반복 : 프로그램이 특정 상태에 도달할 때 까지 구문을 반복하여 수행 while repeat for do...until

같은 특성을 가집니다.


비구조적 프로그래밍


개념

구조적 프로그래밍과는 반대로 하나의 연속된 덩어리에 모든 코드를 넣는 프로그래밍 패러다임입니다. GOTO 같은 흐름 제어문에 의존할 수 밖에 없기때문에 읽거나 디버그하기도 매우 어렵고 코드 재사용성을 떨어뜨립니다.

하지만 베이직이나 포트란같은 오래된 언어에서는 여전히 사용되기도 합니다.

728x90