GOTO is harmful?
목차
작성 동기
AOP를 향한 비판을 읽다가 "AOP는 GOTO보다 해롭고 심지어 COME FROM문과 가깝다"는 비판을 보다가 GOTO에 대한 나의 불확실함과 통념(goto는 해롭다)에 대해서 이참에 다시 정리해보려고 한다. 또 실제로 현업에서 goto가 있는 프로그램을 본 적이 있다. 은탄환은 없다라는 말 또한 통념에 대해서 비판의식을 부추겼다.
개요
제어흐름(control flow)의 하나인 GOTO는 이전에 키보드의 구성요소 중 하나였을 정도로 흔한 statement였다. 하지만 구조화프로그래밍의 대두와 비난에 힘입어 차츰 시들어져갔다. 하지만 그렇다고 절대악은 아니다. 특정 케이스의 경우에는 오히려 쓰는 것이 바람직할 수도 있는데, 결국 제대로 이해하는 것이 중요하다.
"꼭 필요한 곳에만 써라"
사용법
in C
in Java
최초의 JVM에는 있었지만, 불필요해서 keyword에는 추가해놓고, 사용하지 못하게 했다.(keyword에 없으면 사용자들이 변수명으로 쓸 수 있는 등 혼란스러워질 수 있기 때문에 ) 1
사용하기 좋은 경우
포프에 의하면 본인이 알기로는 이중루프를 빠져나올 경우밖에 없다고 한다. goto를 사용하지 않을 경우 별도의 변수를 두는 경우 코드가 더러워 보이기때문에 그렇다.
현재 논쟁 상태
현재도 학계에서도 논쟁중인 사안이다.
과거논쟁
다익스트라, 도널드크누스 둘다 튜링상의 수상자로서 GOTO문의 해로움을 비판하는 것에 앞장섰다.
GOTO를 향한 비판
구조적프로그래밍이론가들에 의해 2 대안(구조화프로그래밍,예외처리 등) 보다 이해하기 어렵다는 이유로 공격당하였다.
동작과정
Goto는 하드웨어 수준에서 전부 쓰이는 것으로 알고 있다. for문도 내부적으로는 Label과 점프테이블로 이루어져 있다.
참고사이트
관우는 왜 C 언어를 살육했나? [2-14] 논란의 구문 : goto문 (choichajang.github.io)
Beej's Guide to C Programming(다른 C서적에서는 자세히 다루지 않는 GOTO문 활용법을 잘 다루고 있다.
progsbase.com - Flow-Charts of Programming Language Constructs - goto를 포함 flow차트를 굉장히 잘 도식화하여 프로그래밍언어론을 공부하는 사람에게 유용할 듯하다.
객체지향 시스템과 패러다임 그리고 철학 | GeekNews (hada.io) - 프로그래밍패러다임 전반을 다루고 있기에, goto와 관련된 것만이 아닌 전체그림을 이해하는데 도움이 된다.
2022-12-29
- syntax - Is there a goto statement in Java? - Stack Overflow [본문으로]
- 그 유명한 다익스트라의 논문[GOTO문의 해로움]은 너무도 유명하다. [본문으로]