프로그래밍 언어론 6-2강. 구조화, 비구조화된 흐름(Structured and Unstructured Flow)

[프로그래밍 언어론]

2019. 11. 22. 15:40

 

[goto statement]

: 어셈블리 언어에서 조작흐름은 조건문과 무조건적인 jump를 이용분기문의 역할을 수행한다.

 

# 초기 Fortran의 goto문을 이용한 조작 흐름 예시

  if (A .lt. B) goto 10

  ...

10

: 매우 goto문 의존적이다.

 

 

 

[goto문의 역사]

: 1960년말, 언어 디자이너들이 goto문의 장점과 단점에 대해 논하였다.

: 요즘에는, Ada와 C#에선 제한된 문맥안에서만 goto문 사용을 허용한다.

: Modula (1,2,3), Clu, Eiffel, Java, 그리고 대부분의 스크립팅 언어들은 아예 goto문 허용하지 않는다.

: Fortran 90과 C++는 주로 그들의 이전버전 언어들과의 호환성을 위해서 허용한다 (Java는 이전버전의 goto를 mis-use 키워드로 지정함으로써 해결)

: goto문을 포기한것은 1970년대 유행했던 구조화된 프로그래밍으로 알려진 혁명의 큰 부분을 차지했다.

 

 

 

[구조화된 프로그래밍 방식 주요점]

: 기존의 goto방식의 문제점 해결

: 탑-다운 디자인

: 코드의 모듈화

: 구조화된 타입 ( 레코드, 셋, 포인터, n중 배열 등)

: 서술되는(descriptive) 변수와 constant names

: 광범위한 논평(주석)

 

 

 

[구조화된 프로그래밍 방식에서의 goto문]

: 대부분의 잘 설계된 명령형 알고리즘들이 오직 시퀀싱(sequencing), 선택문(selection) 그리고 반복문(Iteration)으로만 표현된다. (기존 goto 대체방법)

: 또한, 기존의 goto문의 label방식을 대체해, 바운더리를 사용해 문맥적으로 중첩된 구조를 반복할 수 있게 되었다.

: 즉, 기존의 goto문으로 해결했던 방식들을 전부 대체할 수 있게 되었다.

+) 현대의 프로그래머들에게 친숙한 구조화된 제어 흐름의 대부분은 Algol 60 에 의해 개척되었다.

    (if..then..else 구조 / for, while / switch 문 등)