Basic Knowledge/Paradigm

프로그래밍 패러다임 (2) 구조적 프로그래밍

roofTopCaat 2023. 9. 17. 20:50

#  인물 개개인의 상세한 인생사, 대상의 역사와 프로그래밍 분야 외적인 업적은 잘라낸다.

 

초기 프로그래밍은 구조적인 형태 없이 개발되었다.

1950~70년대의 프로그래밍은 구조적 프로그래밍에 대한 방법론이 대두되었다. 구조적 프로그래밍은 소프트웨어 개발 방법론 중 하나로 코드의 가독성은 높게, 프로그램의 오류 가능성은 낮춰지게 하며 유지보수를 용이하게 한다.

 

프로그램을 구조화된 논리적 블록으로 분할하는 것, 단일 진입과 단일 퇴장을 통한 코드의 명료화와 용이한 디버깅 등이 특징이다

 

코딩 예시

 

 ● 각 변수에 대한 의미를 부여하는 사전 작업 (const)

 ● 들여쓰기, 주석을 통해 내용 파악을 쉽게 해준다

 ● sub나 function을 잘 활용한다 (처음에는 main을 잘 관리해줄 수 있는 메인터넌스 위주를 설계 -> 특별한 기능을 넣고 싶으면 sub,function 으로 빼서 지역변수 선언(sub는 리턴값이 없고 function은 리턴값이 있다)

 

순차적으로 실행되는 구조 / if-else, switch-else 등의 조건에 따른 선택 구조 / for,while,do-while 등의 반복 실행

 

등의 특징이 있다.

 

구조적 프로그래밍의 주요 개념

 

 **흐름 제어**: 프로그램의 흐름을 제어하기 위해 순차, 선택, 반복 등의 제어 구조를 사용한다. 이로써 코드의 실행 경로를 명확하게 정의한다.

 

**모듈화**: 프로그램을 작은 모듈 또는 함수로 나누어 개발하는 것을 강조한다. 이로써 코드의 재사용성이 향상되고 유지보수가 용이해진다.

 

**탈출 구문 최소화**: 구조적 프로그래밍에서는 breakgoto와 같은 "탈출" 구문을 최소화한다. 이는 코드의 가독성과 안정성을 향상시킨다.

 

**논리적 응집성 (Logical Cohesion)**: 각 함수나 모듈은 논리적으로 관련된 작업을 수행하도록 설계되어야 한다. 이로써 코드의 이해와 유지보수가 간편해진다.

 

**자료 추상화**: 데이터를 추상화하여 불필요한 세부 정보를 숨기고 코드의 복잡성을 줄인다. 이는 자료 구조와 객체 지향 프로그래밍과의 연계성을 갖게 되는 중요한 요소이다.

 

1) 1958년 LISP의 등장

 

LISP는 인공지능 연구와 프로그래밍에 사용된 심볼릭 프로그래밍 언어이다. 심볼릭 프로그래밍 언어는 숫자가 아닌 기호와 기호에 대한 연산을 다룬다.

 

기호 논리나 인공지능 연구를 위해 개발되었으며,  등장 전후로 다양하고 새로운 고수준 언어들이 등장하기 시작한다.

 

고급 언어의 등장은 프로그래밍을 더 추상적이고 인간이 이해하기 쉬운 형태로 표현할 수 있게 했다.

 

2) 1960년대 초 구조적 프로그래밍과 ALGOL

 

당시 기세등등한 포트란에 대항하기 위해 유럽에서 개발된 프로그래밍 언어인 ALGOL

 

ALGOL은 알고리즘의 연구개발을 주요 목적으로 하며 파스칼, 현대 사람들에게 익숙한 C언어 등의 수많은 언어에 영향을 끼쳤다.

 

최초로 프로그래밍 언어를 정의하기 위한 구조적 메타언어 표기법인 배커스 표기법(BNF)에 의해 기술된 언어이다

 

현재에 이르러서는 거의 사용되지 않는다

 

3) 1960년대 후반 구조적 프로그래밍과 UNIX

 

켄 톰슨, 데니스 리체, 조 오사나 등이 참여한 Bell Labs에서 개발된 UNIX는 다중 사용자, 다중 환경 작업을 지원하고 소프트웨어 개발을 위한 다양한 도구를 제공했으며 윈도우를 제외한 현대적 컴퓨터 운영체제의 원형이 되었다.

 

처음부터 TCP/IP등의 네트워크 기능도 가지고 있어 이더넷 같은 LAN이나 인터넷 기능을 사용하기 위해서도 유닉스를 사용해야 했다. 이후 등장하는 미국 국방부의 ARPANNET이나 1989년 월드 와이드 웹의 인터넷 역사와도 깊은 연관이 있다

 

UNIX는 구조적 프로그래밍 원칙을 따르는 시스템 소프트웨어로 개발되었는데, C언어가 UNIX를 통해 개발되어 똑같이 구조적 프로그래밍을 채택했다.

 

 

출처 : reddit.com

 

현재로써는 서버 시장을 장악한 Linux가 '사실상 현존하는' 유닉스이다.

 

4) 1970년대 Pascal 언어의 등장, C언어의 구조적 확장, 구조적 프로그래밍의 확산, 그리고 현재

 

니클라우스 워스가 개발한 Pascal 언어는 구조적 프로그래밍의 원칙을 따르며 학습용 언어로 사용되었다

현재로썬 FA나 증권사 쪽에서 많이 사용된다

 

1970년대 중반 이후로 C언어는 절차 지향 프로그래밍에 구조적 프로그래밍을 혼합하는 형태로 변모한다.

 

1980년대 이후로 구조적 프로그래밍은 다양한 개발 언어와 방법론에 적용되며 가독성, 유지보수성, 품질 향상에 기여했다. 

 

구조적 프로그래밍은 이후 절차적 / 함수형 / 객체지향으로 가지를 뻗어, 현재에 이르러서는 방법론적 불명확함 때문에 실무에서 '구조적 프로그래밍'은 잘 쓰이지 않는 말이 되었다. 좀더 거시적인 패러다임으로 이해하면 편할 듯하다.