비구조적 프로그래밍
1. 개요
비구조적 프로그래밍은 레이블이나 명령어 주소로의 비구조적 점프를 사용하여 프로그램의 실행 흐름을 제어하는 방식을 말한다. 이는 일련의 문, 선택, 반복 구문을 사용하는 구조적 프로그래밍과 대조된다. 오늘날 많은 프로그래밍은 구조화되어 있지만, return 문, 루프 탈출, 예외 처리, 계속과 같은 기능들은 비구조적 패러다임의 예시로, 구조적 프로그래밍 언어에서도 널리 사용된다.
-
프로그래밍 패러다임 -
지식 표현
지식 표현은 컴퓨터가 인간의 지식을 이해하고 활용하도록 정보를 구조화하는 기술이며, 표현력과 추론 효율성의 균형, 불확실성 처리 등을 핵심 과제로 다양한 기법과 의미 웹 기술을 활용한다. -
프로그래밍 패러다임 -
의도적 프로그래밍
의도적 프로그래밍은 프로그래머의 의도를 명확히 포착하고 활용하여 소프트웨어 개발 생산성을 향상시키기 위한 프로그래밍 패러다임으로, 트리 기반 저장소를 사용해 코드 의미 구조를 보존하고, WYSIWYG 환경에서 도메인 전문가와 협업하며, 코드 상세 수준 조절 및 자동 문서화를 통해 가독성과 유지보수성을 높이는 데 중점을 둔다.
2. 특징 및 일반적인 개념
비구조적 프로그래밍은 프로그램 실행 흐름이 순차적으로 진행되지 않고, `GOTO`문 등을 사용하여 프로그램의 특정 위치로 이동하는 방식이다. 이는 프로그램의 구조를 파악하기 어렵게 만들고, 유지보수를 어렵게 하는 단점이 있다. 구조적 프로그래밍은 이러한 비구조적 프로그래밍과 대조적이다.
2.1. 기본 개념
비구조적 언어의 프로그램은 레이블 또는 명령어 주소로의 비구조적 점프를 사용한다. 줄에는 일반적으로 번호가 매겨지거나 레이블이 있을 수 있다. 이를 통해 실행 흐름이 프로그램의 모든 줄로 점프할 수 있다. 이는 구조적 프로그래밍과 대조적이다. 구조적 프로그래밍은 일련의 문, 선택(if/then/else) 및 반복(while 및 for) 구문을 사용한다.
3. 현대적 용도
오늘날 많은 프로그래밍은 구조화되어 있다. 그러나 구조화된 패러다임은 지나치게 제한적일 수 있으며, 일부 로직은 비구조화된 방식으로 더 쉽게 표현될 수 있다.
예외 처리와 계속은 비구조적 패러다임의 예시이다. 계속은 Goto 문의 기능을 일반화한 것이라고 할 수 있다.
3.1. return 문
함수에서 `return`은 나머지 코드를 실행하지 않고 해당 함수에서 반환하게 한다. 이것은 비구조적 패러다임의 일종이며, 구조적 프로그래밍 언어에서도 널리 사용된다. 루프 탈출 등에도 이와 유사한 점이 적용된다.
한편, 순수 함수형 언어에서는 모든 곳이 "중간 리턴"이라고 할 수 있으며, 절차적 언어 내에서도 순수한 함수라면 중간 리턴으로 작성하는 것이 더 단순하고 이해하기 쉬우며 오히려 구조화되어 있다고 할 수 있다. 즉, 표면적인 코딩 규칙으로 "중간 리턴 금지" 등과 같이 교조적으로 규정하는 것은 구조화라는 것을 전혀 이해하지 못한다는 증거이기도 하다.
3.3. 예외 처리
프로그램 실행 중 발생하는 예외를 처리하는 메커니즘인 예외 처리는 비구조적 패러다임의 한 예시이다. 예외 발생 시, 프로그램의 흐름이 예외 처리 블록으로 점프하기 때문이다.
3.4. 계속(Continuation)
계속은 프로그램 실행의 특정 지점을 저장하고 나중에 해당 지점으로 복귀할 수 있게 해주는 기능이다. 이는 `goto` 문의 기능을 일반화한 것으로 볼 수 있다.
4. 비판적 관점
구조적 프로그래밍과 대조적으로 비구조적 언어의 프로그램은 레이블 또는 명령어 주소로의 비구조적 점프를 사용한다. 오늘날 많은 프로그래밍은 구조화되어 있지만, 구조화된 패러다임은 지나치게 제한적일 수 있으며, 일부 로직은 비구조화된 방식으로 더 쉽게 표현될 수 있다.
예를 들어, 함수에서 return 문은 나머지 코드를 실행하지 않고 해당 함수에서 반환하게 하는 비구조적 패러다임의 일종이며, 구조적 프로그래밍 언어에서도 널리 사용된다. 루프 탈출도 이와 유사하게 적용된다.
한편, 순수 함수형 언어에서는 모든 곳이 "중간 리턴"이라고 할 수 있으며, 절차적 언어 내에서도 순수한 함수라면 중간 리턴으로 작성하는 것이 더 단순하고 이해하기 쉬우며 오히려 구조화되어 있다고 할 수 있다. 즉, 표면적인 코딩 규칙으로 "중간 리턴 금지" 등으로 하는 것은 구조화에 대한 이해 부족을 나타내는 것일 수 있다.
예외 처리와 계속도 비구조적 패러다임의 예이다. 계속은 Goto 문의 기능을 일반화한 것이라고 할 수 있다.