비구조적 프로그래밍

비구조적 프로그래밍

정의
비구조적 프로그래밍(英: unstructured programming)은 프로그램의 흐름을 순차적·조건적·반복적 구조가 아닌, 주로 goto 문이나 레이블(label) 등을 이용해 임의로 점프하는 방식으로 구현하는 프로그래밍 스타일을 말한다. 이러한 방식은 코드 흐름을 명시적으로 구분하는 블록 구조(block structure)를 사용하지 않으며, 프로그램의 제어 흐름이 복잡하게 얽히는 경우가 많다.

역사

  • 1950~1960년대 초기에 초기 고급 언어(예: FORTRAN I, ALGOL 58)에서 goto 문이 널리 사용되었다. 당시 하드웨어와 컴파일러 기술의 한계로 구조화된 제어 구문이 부족했기 때문에 비구조적 방식이 일반적이었다.
  • 1960년대 후반, Edsger W. Dijkstra가 1968년 발표한 논문 *“Go To Statement Considered Harmful”*에서 비구조적 흐름제어가 코드 이해와 유지보수를 어렵게 만든다고 비판하면서 구조적 프로그래밍이 강력히 제안되었다.
  • 이후 C, Pascal, Ada 등 많은 언어가 구조적 제어 구문(if, while, for 등)을 기본으로 제공하면서 비구조적 프로그래밍은 점차 감소하였다. 그러나 여전히 시스템 수준 프로그래밍, 임베디드 시스템, 레거시 코드 유지보수 등에서 goto 문이 사용될 경우가 있다.

특징

구분 내용
제어 흐름 라벨과 goto에 의한 임의 점프가 중심.
코드 구조 블록 경계가 명확하지 않아 흐름을 추적하기 어려움.
디버깅 점프 목표가 멀리 떨어져 있을 경우 스택 추적이 복잡해짐.
성능 일부 경우에는 컴파일러 최적화가 제한되어 성능 저하 가능.
응용 분야 저수준 하드웨어 제어, 부트 로더, 레거시 시스템 등.

장점

  • 간단한 조건 분기나 오류 복구 루틴을 빠르게 구현 가능.
  • 특정 하드웨어 환경에서 코드 크기와 실행 속도를 미세하게 조정할 수 있다.

단점

  • 가독성이 크게 떨어져 유지보수 비용이 증가한다.
  • 프로그램 오류(무한 루프, 자원 누수 등)의 발생 가능성이 높다.
  • 현대의 구조적·객체지향 언어와 호환성이 낮다.

현대적 사용 맥락

  • 레거시 시스템: 오래된 코드베이스에서 전체를 구조화된 형태로 전환하기 어려운 경우 일부 비구조적 구문이 남아 있다.
  • 임베디드/실시간 시스템: 메모리와 실행 시간에 극단적인 제약이 있는 환경에서 제한된 형태의 goto 사용이 허용될 수 있다.
  • 컴파일러 구현: 중간 코드(IR) 단계에서 비구조적 흐름을 재구조화(structuring)하는 기법이 사용된다.

관련 개념

  • 구조적 프로그래밍: 블록 구조와 제어 흐름 구문(if, while, for)을 이용해 코드 가독성과 유지보수성을 높이는 방법론.
  • 절차적 프로그래밍: 함수·프로시저 단위로 프로그램을 구성하는 방식으로, 구조적·비구조적 구문을 모두 포함할 수 있다.
  • 스파게티 코드: 비구조적 흐름으로 인해 얽히고설킨 코드 구조를 비유적으로 이르는 용어.

참고 문헌

  • Dijkstra, E. W. (1968). Go To Statement Considered Harmful. Communications of the ACM.
  • Kernighan, B. W., & Ritchie, D. M. (1988). The C Programming Language (2nd ed.). Prentice Hall.

외부 링크

  • 없음(본 항목은 기존 문헌 및 공신력 있는 자료를 기반으로 작성됨).
둘러보기

더 찾아볼 만한 주제