오늘은 자주 사용하지 않sms goto문에 대해 이야기를 하도록 하겠습니다. 사실 goto문 특정 위치로 강제로 이동시키는 명령어입니다. 강제로 특정 위치로 이동하기 때문에 코딩의 흐름과 별개로 특정 위치로 이동 될 수 있습니다. 처음 설계 흐름이 나중에 수정하다보면 이전 코딩의 흐름이 바뀔 수 있습니다. 그런데 goto문은 초기 흐름에 맞춰서 강제로 이동시키게 설계 되었는데 중간에 다른 흐름을 만들게 되면 코딩이 전체적으로 흐름이 바뀌게 되겠죠. 변화 된 흐름에 맞춰 코딩이 흘러야 하지만 goto문은 그냥 해당 조건만 만족하면 강제로 특정 위치로 점프 하기 때문에 바뀐 흐름에서 강제 점프하게 되면 오류가 발생 할 수 있습니다. 또한 많은 goto문을 사용하게 되면 코딩 간 특정 위치로 점프가 난무 하기 때문에 전체적 코딩 흐름을 자연스럽게 만들어 낼 수 없습니다. 그래서 goto문은 강력한 점프 명령어이면서도 잘 사용하지 않는 명령어 입니다.
그럼 goto문에 대해서 살펴보도록 하죠.
간단한 예를 들어 goto문을 설명하겠습니다.
예)
goto AAA;
명령문1;
AAA:
명령문2;
위 예에서 goto AAA라는 표현은 AAA라는 글자가 있는 위치로 점프하라는 명령어입니다. 어떤 AAA라면 "AAA:" 이렇게 AAA라는 글자에 콜론이 붙은 위치로 강제로 점프 시키라는 명령어 입니다.
만약 위와 같이 코딩이 되어 있다면 처리 동작은 명령어2만 처리하게 됩니다. 명령어1은 코딩되어 있지만 위에 goto 명령어로 명령어1은 수행되지 못하고 "AAA:"라는 위치로 점프하여 명령어2가 수행되게 됩니다.
goto명령어는 참 단순하죠.
goto 이동위치명;
이렇게 이동위치명이 써 있는 곳으로 점프하는 명령어로 어렵지 않습니다.
그러면 이게 과연 어떤 느낌으로 사용되는지 코딩 예로 보여드리 겠습니다.
문제 : 자연수 1~10까지의 합을 구하시오?
문제는 어떻게 기존에 풀이 했나요.
for(i=1;i<=10;i++){
sum+=i;
}
이렇게 for문을 이용해서 1~10까지의 합을 구했었습니다. 이걸 goto문으로 접근 해 볼까요.
AAA:
a++;
if(a<=10){
sum+=a;
goto AAA;
}
이렇게 표현할 수 있습니다. if문 a가 10보다 작거나 같다면 계속 sum에 a값을 누적시키고 goto문으로 AAA라는 위치로 이동하여 a값을 1씩 증가하고 sum변수에 a값을 더하여 누적시킵니다. 보시면 a가 11이 되었을 때 거짓이 되기 때문에 if문의 참 조건의 명령문들을 수행하지 않고 if문을 빠져나오게 됩니다. 더이상 특정 위치로 이동하지 않게 되고 sum변수에는 a가 1~10까지의 숫자가 더해진 값이 저장되어 있겠죠.
위 코딩을 잘 비교하고 goto문의 느낌을 잘 느껴보시기 바랍니다. 이 느낌을 이해 하실 수 있다면 이제까지 코딩했던 조건문들이 goto문으로 다 변환 하여 코딩 할 수 있습니다. 이건 여러분들이 해보시기 바라고 암튼 결과가 1~10까지의 합 55가 goto문으로 해서 나오는지 실행 시켜봐야 겠죠.
[전체소스]
#include
int main(int argc, char *argv[]) {
int a=0;
int sum=0;
AAA:
a++;
if(a<=10){
sum+=a;
goto AAA;
}
printf("%d \n",sum);
return 0;
}
[결과}
오늘은 빼먹은 내용 중 하나인 goto문에 대해서 간단히 살펴보았습니다. 코딩을 보면 의외로 써먹을 곳이 많아 보일 거에요. 하지만 잘 사용하지 않는 명령어이면 될 수 있으면 쓰면 안되는 명령어입니다. 위 1~10까지의 합을 구하는 간단한 표현에 goto문을 사용했지만 나중에 수십 수백 수천줄의 코딩에서 goto문을 쓸 때는 전체 수십 수백 수천줄의 코딩의 흐름을 완벽히 파악하고 goto문을 사용해야 합니다. 코딩 줄이 늘어날 수 록 프로그래머의 머리는 더 복잡해져서 코딩하기 힘들어 집니다. 암튼 쓰면은 안된다는 느낌의 암묵적인 금기로 이 명령어를 거의 대부분 사용하지 않는 표현입니다. 그래도 어떤 명령어인지는 알아만 두시고 여러분들이 이제까지 코딩 한 것 중에 아무거나 goto 문 적 관점으로 코딩을 수정해 보세요. 쓰면 안되지만 쓸 줄은 알고 있어야 겠죠.