์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”2. ์ƒ์„ธ3. ์˜ˆ์ œ4. ๋‹จ์ 5. ์žฅ์ 6. ๊ธฐํƒ€

1. ๊ฐœ์š”[ํŽธ์ง‘]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์–ด๋А ํŠน์ • ์ค„ ๋ฒˆํ˜ธ๋‚˜ ๋ ˆ์ด๋ธ”๋กœ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ ๋Œ์•„๊ฐˆ ๋•Œ ์“ฐ๋Š” ๋ช…๋ น์ด๋‹ค. ์ˆœ๊ฐ„์ด๋™ ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์œผ๋กœ, ์ผ๋ถ€ ๊ณ ๊ธ‰ ์–ธ์–ด์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์ด๋‹ค. ์›๋ž˜๋Š” CPU์˜ ๋ช…๋ น์–ด ์ค‘์—๋Š” JUMP๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ํŠน์ • ๋ถ€๋ถ„์œผ๋กœ ๋ฐ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ์กฐ๊ฑด๋ถ„๊ธฐ๋‚˜ ๋ฐ˜๋ณต ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด๊ฒƒ์„ ๊ณ ๊ธ‰ ์–ธ์–ด์— ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ GOTO๋‹ค.

2. ์ƒ์„ธ[ํŽธ์ง‘]

GOTO๊ฐ€ ์—†๋Š” ์–ธ์–ด๋„ ๋งŽ์ด ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์–ด์„œ ๊ทธ๋ ‡๋‹ค.

์ผ๋‹จ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘ ๋ช…๋ น์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธฐ์ง€ ์•Š๋Š” ์–ธ์–ด๋“ค, ๋Œ€ํ‘œ์ ์œผ๋กœ ์ˆœ์ˆ˜ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด(Haskell ๋“ฑ)์™€ ์ผ๋ถ€ ๋…ผ๋ฆฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค(๋Œ€ํ‘œ์ ์œผ๋กœ SQL)์€ GOTO๊ฐ€ ์—†๋‹ค. ๋˜ํ•œ ์ผ๋ถ€ ํŠน์ˆ˜ ๋ชฉ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘์—์„œ ๊ณผ๊ฑฐ ์‹œ์ ์œผ๋กœ ๋˜๋Œ์•„๊ฐ€๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ์–ธ์–ด๋“ค(VHDL ๋“ฑ)์ด ์žˆ๋Š”๋ฐ ์ด๋“ค ์–ธ์–ด๋“ค์—๋„ GOTO๊ฐ€ ์—†๋‹ค. ์ด๋“ค ์–ธ์–ด๋“ค์—๋Š” ์•ž์œผ๋กœ๋„ ์˜์›ํžˆ GOTO๊ฐ€ ์ถ”๊ฐ€๋  ์ผ์ด ์—†๋Š”๋ฐ, ์–ธ์–ด์˜ ์„œ์ˆ  ๋…ผ๋ฆฌ ์ž์ฒด์— '์‹œ๊ฐ„'์ด๋ผ๋Š” ๊ฐœ๋…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ช…๋ น์˜ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€๋งŒ GOTO๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. (๋Œ€ํ‘œ์ ์œผ๋กœ Java์˜ ๊ฒฝ์šฐ ์˜ˆ์•ฝ์–ด๋กœ์„œ๋Š” ์กด์žฌํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์ด ์—†๋‹ค.) ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์„ ์ง€์›ํ•ด์ฃผ๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด GOTO๊ฐ€ ์—†์–ด๋„ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ์— ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์•„๋ž˜์—์„œ ์„œ์ˆ ํ•  ๋ฌธ์ œ์  ๋•Œ๋ฌธ์— ์ž˜ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ๊ณ ๋กœ GOTO๋Š” ๋™์ผ ํ•จ์ˆ˜ ๋‚ด์—์„œ์˜ ์ ํ”„๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•จ์ˆ˜๋ผ๋Š” ๊ฐœ๋…์ด ์—†๋Š” ์–ธ์–ด(์–ด์…ˆ๋ธ”๋ฆฌ์–ด, GW-BASIC ๋“ฑ)๋Š” ์†Œ์Šค ์ฝ”๋“œ ์•„๋ฌด ๊ณณ์œผ๋กœ๋‚˜ ์ ํ”„๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ๊ฐœ๋…์ด ์žˆ๋Š” ์–ธ์–ด์—์„œ๋Š” ํ•จ์ˆ˜ ๋ฐ”๊นฅ์˜ ๋ ˆ์ด๋ธ”๋กœ GOTO๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ๋ฌผ๋ก  ์ด ํ•จ์ˆ˜๋„ ๋›ฐ์–ด๋„˜์–ด์„œ ํŠน์ • ์ฝ”๋“œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„์ฃผ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ C/C++์˜ ๊ฒฝ์šฐ setjmp, longjmp๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋„˜์–ด์„œ ์ ํ”„๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค๋งŒ ์ด ํ•จ์ˆ˜๊ฐ€ ํ•˜๋Š” ๊ธฐ๋Šฅ์€ 'ํ˜„์žฌ์˜ ์Šคํƒ์˜ ์ƒํƒœ์™€ ์ฝ”๋“œ์˜ ์œ„์น˜'๋ฅผ ์ €์žฅํ•˜์—ฌ ํŠน์ • ๊ฒฝ์šฐ์— ๊ทธ ์œ„์น˜๋กœ ๋ณต๊ท€ํ•˜๋Š” ๊ฒƒ์ด๋ผ์„œ, ์•„์ง setjmp๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ setjmp๊ฐ€ ๋๋‚œ ๊ฒฝ์šฐ์—๋Š” ์ ํ”„ํ•  ์ˆ˜ ์—†๋‹ค. ๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๊ฐˆ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, C++์˜ try, catch, throw๊ฐ€ ํ•˜๋Š” ์—ญํ• ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

3. ์˜ˆ์ œ[ํŽธ์ง‘]

BASIC์—์„œ์˜ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

10 LET a = 10
20 PRINT "ํƒ€์ž”์ด " + a + "์›์งœ๋ฆฌ ํŒฌํ‹ฐ๋ฅผ ์ž…๊ณ , " + (a + 10) + "์›์งœ๋ฆฌ ์นผ์„ ์ฐจ๊ณ  ๋…ธ๋ž˜๋ฅผ ํ•œ๋‹ค. ์•„์•„์•„~"
30 LET a = a + 10
40 IF a < 100 THEN GOTO 20
50 END

์˜ˆ์‹œ๊ฐ€ ์™œ ์ €๋”ฐ๊ตฌ์ง€
์ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 10, 20, 30, 40, 20, 30, 40, 20, 30, 40, ..., 40, 50 ์ˆœ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด์„œ ํƒ€์ž” ๋…ธ๋ž˜๋ฅผ 100์›๊นŒ์ง€ ๋ถ€๋ฅธ๋‹ค. ์ง์ ‘ ๋Œ๋ ค๋ณด๊ณ  ์‹ถ์œผ๋ฉด http://www.quitebasic.com/ ์— ์ € ์ฝ”๋“œ๋ฅผ ๋ณต๋ถ™ํ•ด์„œ ์‹คํ–‰ํ•ด๋ณด์ž.

๋ฐฐ์น˜ ํŒŒ์ผ์„ ํ™œ์šฉํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ œ๋กœ๋Š”
@echo off
:12
cls
echo ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค
set /p ์•”ํ˜ธ=์•”ํ˜ธ ์ž…๋ ฅ:
if %์•”ํ˜ธ%==22 goto 23
goto 12

:23
cls
echo ์„ฑ๊ณต!
pause
exit

4. ๋‹จ์ [ํŽธ์ง‘]

๊ณ ๊ธ‰ ์–ธ์–ด์—์„œ GOTO๋ฌธ์€ ๋งŽ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ํ„ฐ๋ถ€์‹œ๋˜๋Š” ๊ตฌ๋ฌธ์ด๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ด๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์ด ์“ฐ์ด๋‹ค ๋ณด๋ฉด ๊ตฌ์กฐ๊ฐ€ ๋ฌด๋„ˆ์ง€๊ณ  ์ฝ”๋“œ๊ฐ€ ํ™ฉํํ™”๋˜๋ฉด์„œ ์–ด์งธ ์‹คํ–‰์€ ์ž˜ ๋˜๊ธด ๋˜๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ์ง  ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ž์‹ ๋„ ํ—ท๊ฐˆ๋ ค ํ•˜๋Š” ์†Œ๋ฆฌ๊ฐ€ ์ ˆ๋กœ ๋‚˜์˜ค๋ฉฐ ์ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์–ด์ง€๋Š” ์ง€๊ฒฝ์— ์ด๋ฅด๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ๋กœ ๋œ ์ฝ”๋“œ๋ฅผ '์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ'๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฐ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์Šคํƒ€์ผ์„ ๋ฐ˜๋Œ€ํ•˜๊ณ  ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ฃผ์ฐฝํ•œ ๋„ค๋œ๋ž€๋“œ์˜ ์ปดํ“จํ„ฐ ๊ณผํ•™์ž ์—์ธ ํ—ˆ๋ฅด ๋‹ค์ต์ŠคํŠธ๋ผ(Edsger Wybe Dijkstra)๋Š” GOTO๋ฌธ์˜ ์‚ฌ์šฉ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ ๋ถ„์„๊ณผ ์ฆ๋ช… ๋“ฑ์˜ ์ธก๋ฉด์— ํ•ด๊ฐ€ ๋œ๋‹ค๊ณ  ํ•œ ๋ฐ” ์žˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ๋„ GOTO๋ฌธ์„ ๋‚จ์šฉํ•˜๋ฉด ๋””๋ฒ„๊น… ๋ถˆ๊ฐ€+๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋‚œํ•ด+๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์š• ์ฒ˜๋จน๊ธฐ+๋‚ด๊ฐ€ ์ด๋Ÿฌ๋ ค๊ณ  ์ด ์ฝ”๋“œ๋ฅผ ์งฐ๋‚˜ ์ž๊ดด๊ฐ ๋“ค๊ณ  ๊ดด๋กœ์šด ์‚ฌ๋‹จ ์ฝค๋ณด๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ C์–ธ์–ด์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์–ด์ฉ” ์ˆ˜ ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ, setjmp, longjmp ๊ฐ™์€ ๋Œ€์šฉํ’ˆ์ด ์กด์žฌํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์†Œ์Šค๊ฐ€ ๊ผฌ์ด๋Š” ๊ฒƒ์€ ์‚ฌ๋žŒ์—๊ฒŒ๋งŒ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผ์„ ํ•˜๋ฉด ์ตœ์ ํ™”๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ, ์–ธ์–ด ์ƒ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์กฐ๊ฑด๋ฌธ/๋ฐ˜๋ณต๋ฌธ ๋“ฑ์€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ๋ถ„๊ธฐ๋˜๋Š” ํŠน์ • ๋ถ€๋ถ„์ด ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”๊ฐ€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€๋Š” ์•Š์€ ํŽธ์ด๋‹ค. ํ•˜์ง€๋งŒ GOTO๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์ด ๋ช…ํ™•ํ•ด์ง€์ง€ ์•Š์•„์„œ ์ตœ์ ํ™” ๊ฒฐ๊ณผ๊ฐ€ ์ข‹์ง€ ์•Š๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

5. ์žฅ์ [ํŽธ์ง‘]

int sock_create_lite(int family, int type, int protocol, struct socket **res)
{

        err = security_socket_create(family, type, protocol, 1);
	if (err)
		goto out;

	sock = sock_alloc();
	if (!sock) {
		err = -ENOMEM;
		goto out;
	}

	sock->type = type;
	err = security_socket_post_create(sock, family, type, protocol, 1);
	if (err)
		goto out_release;
out:
	*res = sock;
	return err;
out_release:
	sock_release(sock);
	sock = NULL;
	goto out;
}

[2]

GOTO๋ฌธ์˜ ๋‚จ์šฉ์€ ์†Œ์Šค์ฝ”๋“œ์˜ ์ดํ•ด๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์ง€๋งŒ, ์ ์ ˆํ•œ ์‚ฌ์šฉ์€ ์˜คํžˆ๋ ค ์†Œ์Šค์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ๋ช…๋ฃŒ์„ฑ์„ ๋†’์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ฐ€๋ น ๋‹ค์ค‘ ๋ฐ˜๋ณต๋ฌธ์—์„œ์˜ ํƒˆ์ถœ, ์—๋Ÿฌ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ[3] ๋“ฑ ์ผ๋ถ€ ์ž‘์—…์— ํ•œํ•ด์„œ๋Š” GOTO๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋ช…๋ฃŒํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๋‹ค๋งŒ ์œ„์˜ ๊ฒฝ์šฐ๋ผ๋„ ๋กœ์ง ๋ ˆ๋ฒจ์—์„œ์˜ ํƒˆ์ถœ์ด๋‚˜ ํ•จ์ˆ˜ํ™” ์‹œํ‚จ ํ›„์— return๋“ฑ์„ ์ด์šฉํ•˜๋Š” ๋“ฑ GOTO๋ฌธ์„ ์“ฐ์ง€ ์•Š๊ธฐ๋ฅผ ๊ถŒ๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค.
๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊นŒ๋ด๋„ ์‹ฌ์‹ฌ์ฐฎ๊ฒŒ GOTO๋ฌธ์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.[4] ์•ˆ์ •์„ฑ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ์šด์˜์ฒด์ œ ์ปค๋„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋„ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ์ฝ”๋“œ๋‹ค. ํ„ฐ๋ถ€์‹œ ๋˜๊ธฐ์—๋Š” ๋‚˜๋ฆ„๋Œ€๋กœ ์“ฐ์ž„์ƒˆ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๋„ ์‚ฌ์‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” ๋งŽ์€ ๊ฒฝ์šฐ์— ์ผ์ข…์˜ ๊ธˆ๊ธฐ๋กœ์จ ๊ฐ€๋ฅด์นœ๋‹ค. GOTO๋ฌธ์ด ์œ ์šฉํ•œ ๊ฒฝ์šฐ๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ ํŠน์ˆ˜ํ•œ ์ผ€์ด์Šค์ด๊ณ  ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์˜ ์–ด๋””์„œ๋ถ€ํ„ฐ ์†๋Œ€์•ผํ• ์ง€ ๋ชจ๋ฅด๋Š” ์ŠคํŒŒ๊ฒŒํ‹ฐ๋ฅผ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฌ๋Š”๋ฐ๋‹ค๊ฐ€ ์ดˆ๋ณด์ž์˜ ๊ฒฝ์šฐ ํŠนํžˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ. C์–ธ์–ด๋ณด๋‹ค ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” exception(try-catch)์œผ๋กœ, C++๊ฐ™์ด ๋ฆฌ์†Œ์Šค ํ•ด์ œ๊ฐ€ ์ˆ˜๋™์ด์ง€๋งŒ RAII๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” RAII๋ฅผ ์‚ฌ์šฉํ•˜์ž. ์šฉ๋ฒ•์€ ๊ฐ™์œผ๋ฉด์„œ ๊ฐ€๋…์„ฑ์€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋‹ค๋งŒ ๊ทธ๋Ÿฐ๊ฑฐ ์—†๋Š” C์–ธ์–ด์—์„œ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ์™€ ๋™์  ๋ฆฌ์†Œ์Šค ํ•ด์ฒด์— goto๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

์ด GOTO๋ฌธ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ์‚ฐ๋ฌผ์ด๋‹ค๋ณด๋‹ˆ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์ด ๊ฐ•์ œ๋œ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์ด Jump[5] ๊ณ„์—ด์˜ ๋ช…๋ น์–ด๋ฐ–์— ์—†๋Š”๋ฐ, ์ด๋Š” ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ํ˜น์€ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๋ช…๋ น์–ด์—์„œ ์ง€์‹œํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋‹ค. ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์“ฐ์ธ ์ฝ”๋“œ๋„ ์ปดํŒŒ์ผํ•ด์„œ ์–ด์…ˆ๋ธ”๋ฆฌ ์†Œ์Šค๋ฅผ ์—ด์–ด๋ณด๋ฉด ์ „๋ถ€ GOTO๋ฌธ์˜ ๋ฐ˜๋ณตํ˜•์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.[6] ์ •ํ™•ํžˆ๋Š” jmp ๊ณ„์—ด ๋ช…๋ น(jmp, jnz, jz ๋“ฑ. CPU์˜ ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค)์œผ๋กœ ๋ฐ”๋€๋‹ค.

6. ๊ธฐํƒ€[ํŽธ์ง‘]

  • BASIC์—๋Š” GOTO๋ฌธ ์™ธ์—๋„ GOTO๋ฌธ๊ณผ ๋น„์Šทํ•œ GOSUB๋ฌธ์ด ์žˆ๋‹ค. ์ฐจ์ด์ ์€ GOTO๋Š” RETURN์ด ์ง€์›๋˜์ง€ ์•Š์ง€๋งŒ GOSUB๋Š” ์ง€์›ํ•œ๋‹ค. GOSUB๋กœ ์ง„์ž…ํ•œ ์„œ๋ธŒ๋ฃจํ‹ด์„ GOTO๋กœ ํƒˆ์ถœํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ(BASIC์—๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ ๊ฐœ๋…์ด ์—†๋‹ค) GOTO๋กœ ์ง„์ž…ํ•œ ์„œ๋ธŒ๋ฃจํ‹ด์„ RETURN์œผ๋กœ ํƒˆ์ถœํ•˜๋ ค ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
  • PHP์—๋Š” 5.3 ๋ฒ„์ „์—์„œ ์ƒ๊ฒผ๋‹ค.
  • Lua์—๋Š” 5.2๋ถ€ํ„ฐ, LuaJIT์—์„œ๋Š” 2.0๋ถ€ํ„ฐ ์žˆ๋Š”๋ฐ, ํŠน์ดํ•œ ์ ์€ ํƒ€ ์–ธ์–ด์˜ Continue๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • C์–ธ์–ด์—์„œ if์™€ goto๋งŒ ์žˆ์–ด๋„ for, while๋“ฑ์„ ๋Œ€๋ถ€๋ถ„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์‹ค for, while๊ฐ€ GOTO๋ฅผ ๋Œ€์ฒดํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๋‹ค๋งŒ switch์˜ ๊ฒฝ์šฐ๋Š” ์ ํ”„ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๊ธฐ๋Š” ํž˜๋“ค๋‹ค.
[1] ์ด GOTO๋ฌธ์˜ ์‚ฌ์šฉ์ด ํ•ด๊ฐ€ ๋œ๋‹ค๊ณ  ์ง€์ ํ•œ ์„œํ•œ์˜ ์ œ๋ชฉ์ด 'Go to Statement Considered Harmful'(GOTO๋ฌธ์˜ ํ•ด๋กœ์›€)์ด์˜€๋Š”๋ฐ, ์ด '... Considered Harmful'๋ผ๋Š” ์–ด๊ตฌ๊ฐ€ ์ปฌํŠธ์  ์ธ๊ธฐ๋ฅผ ๋Œ์–ด์„œ ์ปดํ“จํ„ฐ ๊ณผํ•™ ๊ณ„์—ด์—์„œ ์–ด๋–ค ๊ฒƒ์— ๋Œ€ํ•œ ๋น„ํŒ์„ ํ• ๋•Œ ์ž์ฃผ ์“ฐ์ด๋Š” ์–ด๊ตฌ๊ฐ€ ๋˜์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 'Wiki Neet Considered Harmful' ์ด๋Ÿฐ์‹์œผ๋กœ. ์ฐธ๊ณ ๋กœ ์œ„ ์„œํ•œ์— ๋Œ€ํ•œ ๋น„ํ‰์œผ๋กœ ' 'GOTO Statement Considered Harmful' Considered Harmful'('GOTO๋ฌธ์˜ ํ•ด๋กœ์›€'์˜ ํ•ด๋กœ์›€)์ด ์žˆ์—ˆ๊ณ , ๋‹ค์‹œ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ฐ˜์‘์œผ๋กœ ๋„๋„๋“œ ๋ฌด์–ด ๋“ฑ์€ ' 'GOTO Statement Considered Harmful' Considered Harmful' Considered Harmful? (' 'GOTO๋ฌธ์˜ ํ•ด๋กœ์›€'์˜ ํ•ด๋กœ์›€'์˜ ํ•ด๋กœ์›€?)์„ ๋ณด๋ƒˆ๋‹ค.
[2] ์†Œ์ผ“ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„(linux/net/socket.c:1027-1054) ์ค‘ ๋ฐœ์ทŒ. (GPL ๋ผ์ด์„ผ์Šค ๋ฐ ์ปค๋ฐ‹ 3c435c)
[3] ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋Š” ์—๋Ÿฌ ์ฝ”๋“œ ๋ฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ํ›„์— ํ”„๋กœ๊ทธ๋žจ์„ ๊ทธ ์ž๋ฆฌ์—์„œ ์ข…๋ฃŒ์‹œ์ผœ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ณ„์† ์‹คํ–‰์‹œ์ผฐ๋‹ค๊ฐ€๋Š” ์—๋Ÿฌ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋•Œ goto ๋ฌธ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ€์žฅ ๋์ค„๋กœ ์ ํ”„์‹œํ‚ค๋Š” ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์†Œ์Šค์ฝ”๋“œ๋„ ์—๋Ÿฌ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ GOTO๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ด๋‹ค.
[4] ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์Šค๋Š” ๋Œ€ํ‘œ์ ์ธ GOTO๋ฌธ ์˜นํ˜ธ์ž ์ค‘์˜ ํ•œ ๋ช…์ด๋‹ค.
[5] ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ Branch๋กœ ์“ฐ๊ธฐ๋„ ํ•จ
[6] ์–ด์…ˆ๋ธ”๋ฆฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ž…๋ฌธํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ผ๋ถ€๋Ÿฌ ๋ฐ˜๋ณต๋ฌธ์„ GOTO์‹์œผ๋กœ ๊ณ ์ณ์„œ ์“ฐ๋Š” ์—ฐ์Šต์„ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค