본문 바로가기
카테고리 없음

프로그래밍 언어 GOTO문의 단점과 장점

by ※§◈‡◐♣ 2021. 7. 10.

현존하는 주요 프로그래밍 언어들이 레이블과 GOTO문은 계속 사용함에도 불구하고, 이 레이블과 GOTO문을 프로그래밍 언어에 계속 포함시킬 것 것인가 하는 문제는 논란의 대상이 되고 있습니다.

 

 

GOTO문의 단점

몇몇의 새로운 언어에서는 레이블과 GOTO문의 사용을  매우 제한하거나 전혀 사용하지 못하게 합니다. 많은 GOTO문을 사용하여 프로그램을 작성하면 프로그램이 매우 빈약하게 디자인될 뿐만 아니라, GOTO문의 많은 사용이 프로그램을 디버그 하고, 이해하고, 유지 보수하기 어렵게 만듭니다.

 

GOTO문이 그룹으로 사용되는 문장도 동일한 개념이므로 이와 같은 결점들을 내포하고 있습니다. 즉, Fortran에서는 산술 IF문보다 더 많은 GOTO개념이 사용되기 때문에 논리 IF문을 사용하는 것이 프로그램을 작성하고, 이해하고 수정하기 편리합니다.

 

이 개념과 두드러진 대조를 보이는 전형적인 예가 algo나 Pascal에서 다음과 같은 택일문의 사용입니다.

  • if <조건> then <문장들> else <문장들> ;

이와 동일한 개념을 Basic으로 프로그래밍한다면 GOTO문의 그룹 형태인 "if <조건> then goto L1 else goto L2"와 함께 두 레이블(lable) L1과 L2에서 다시 문장들이 계속되어 작성되어야 합니다.

 

GOTO문의 장점

프로그래밍 언어에서 GOTO문과 레이블을 사용하여 얻어지는 장점들이 어떠한 것들이 있는가 살펴보겠습니다.

 

가장 큰 장점은 일반적인 컴퓨터에서 간결한 형태의 GOTO문 제어 구조가 곧바로 하드웨어로 제공된다는 데 있습니다. 두 번째 장점은 GOTO-레이블(lable) 구조가 완전한 범용성(즉, 이론적으로는 이 구조만 가지고 모든 알고리즘이 표현 가능함)을 가지고 있다는 것입니다. 이 경우 다른 순서 제어 구조는 편의를 제공할 뿐입니다. 만일 GOTO-레이블(lable) 구조가 없었다면 초기부터 다른 많은 제어 구조들이 요구되었을 것입니다.

 

많은 프로그래밍 언어에서 GOTO-레이블(lable) 구조가 문장 제어 구조의 기본 연산으로 가장 많이 사용되고 있습니다. 더구나 APL이나 어셈블리와 같은 일부 언어에서는 명시적인 순서 제어 구조로서 GOTO-레이블(lable) 구조만 제공하고 있습니다.

 

한편, 순수 Lisp와 시스템 프로그래밍 언어인 Bliss 언어 등에서는 레이블과 GOTO를 전혀 사용하지 못하게 하며, Pascal 언어 등에서는 GOTO-레이블(lable)의 사용에 많은 제한을 가하고 있습니다. 순수 Lisp언어에서는 레이블과 GOTO문 없이 되부름 호출만 사용하여 이론적으로나 실질적으로 순서 제어 구조가 가능하다는 것을 보였습니다. 그러나 대부분의 언어에서 GOTO문을 제거하자면 다양한 다른 구조 제어들을 요구합니다.

 

Algo, PL/I, Pascal 또는 Ada와 같이 풍부한 제어 구조를 제공하는 언어들에서는 알고리즘을 자연스럽게 표현하는 데 있어 GOTO-레이블(lable) 구조가 거의 사용되지 않습니다. 이러한 언어들을 가지고 프로그래밍할 때 GOTO문을 사용하면 실질적으로 프로그램의 설계를 빈약하게 만듭니다.

 

그러므로 될 수 있으면 조건문, 반복문, 되부름 등의 좋은 제어 구조들을 사용하여 GOTO문의 사용을  제거하여야 합니다. 그러나 Fotran, Basic, 또는 Cobol 등의 언어에서는 GOTO문의 제거가 사실상 불가능합니다.

 

댓글