C언어 - goto 문

Ohyuchan·2023년 9월 2일
0

🧑🏻‍💻 C Language

목록 보기
18/18
post-thumbnail

goto

이번 포스팅에서는 goto에 대해서 작성해 보려고 합니다.
c언어를 공부하면서 goto문을 알고 넘어가지 않고 바로 다른 문법으로 넘어가는 것 같아서
따로 정리하면 좋을 것 같아서 goto문을 정리하게 되었습니다.

🤔 goto문이 나쁜건가?

구글에 goto문에 검색하면 "되도록 사용하지 말라" "사용하지 마세요" 이런 형식으로 작성되어 있습니다.
하지만 제 생각은 사용하지 마세요. 와 다른 점이 goto를 적절히 활용하면 중복되는 코드를 없앨 수 있고, 코드를 좀 더 간결하게 만들 수 있다고 생각합니다.
또한 에러 처리에 매우 유용하기 때문에 리눅스 커널에서도 자주 사용되고 있다고 합니다.

✨ goto문은 정말 장점이 없는건가?

goto문은 특정 상황에서 다른 제어문과 비교해 몇 가지 장점이 있습니다.
그러나 이러한 장점을 사용할 때는 주의가 필요하며 goto의 남용은 코드의 가독성을 떨어뜨릴 수 있으므로 신중하게 사용해야 합니다.
예를 들어 스파게티 코드

스파게티 코드란?

👉 스파게티 코드는 goto를 과도하게 사용해서 프로그램의 흐름이 마치 스파게티 면발처럼 꼬여 있다는데서 붙여진 이름입니다.
그래서 스파게티 코드는 가독성이 떨어지고 유지보수가 매우 힘듭니다.

⇲ 복잡한 오류 처리

goto문은 복잡한 오류 처리 시나리오에서 유용할 수 있습니다.
특히, 깊은 중첩 루프나 다중 조건문을 사용하는 경우, 오류가 발생했을 때 코드의 특정 위치로 즉시 이동하여 오류 처리를 수행할 수 있습니다.

⇲ 자원 해제

메모리나 파일과 같은 자원을 할당한 후, 함수 실행 중 어떤 이유로 인해 중간에 함수를 빠져나가야 하는 경우 goto를 사용하여 지원을 해제할 수 있습니다.
이렇게 하면 코드 중복을 피하면서 자원 누수를 방지할 수 있습니다.

⇲ 특수한 제어 흐름

때로는 특별한 제어 흐름이 필요한 경우가 있습니다.
예를 들어, 윈도우 응용 프로그램 개발에서 윈도우 메시지 루프를 처리하는 데 goto문을 사용할 수 있습니다.

⇲ 성능 최적화

특정 상황에서 goto를 사용하여 코드의 성능을 최적화할 수 있습니다.
이는 매우 드문 경우이며, 최적화를 위해서는 코드를 신중하게 분성해야 합니다.

✨ goto를 사용할 때 주의해야 할 점 ‼️

  • goto는 코드를 복잡하게 만들 수 있으며, 가독성을 해칠 수 있으므로 신중하게 사용해야 합니다.
  • 다른 제어문(예: if, while, for)을 사용하여 대부분의 상황을 처리할 수 있으므로, goto는 특수한 상황에서만 사용해야 합니다.
  • 코드에서 goto를 사용할 때 주석을 통해 코드의 의도를 명확하게 설명하는 것이 중요합니다.

🧐 그래서 어떻게 사용해야 하나?

goto문의 구문

goto 레이블;

여기서 "레이블"은 프로그램 내에서 정의된 곳으로 이동하고자 하는 위치를 나타내는 식별자입니다.

goto문의 사용 예제
이 예제는 사용자가 특정 조건을 만족할 때까지 반복하여 값을 입력받는 프로그램을 보여줍니다.

#include <stdio.h>

int main() {
    int number;

retry: // 레이블 정의
    printf("양수를 입력하세요: ");
    scanf("%d", &number);

    if (number <= 0) {
        printf("잘못된 입력입니다. 다시 시도하세요.\n");
        goto retry; // 레이블로 분기
    }

    printf("입력한 양수: %d\n", number);

    return 0;
}

위 코드에서 retry 레이블이 정의되어 있으며, 사용자가 음수를 입력하거나 0을 입력하면 오류 메시지를 출력하고 다시 retry레이블로 분기하여 값을 다시 입력받는 기능을 수행합니다.

💻 오늘 풀었던 goto문과 관련된 문제

이 문제는 Chatgpt를 통해서 문제를 주어달라고 요청했고 요청했을 때 바로 답을 주는 형식이 아닌 문제가 주어지면 내가 답을 제공한 뒤에 답을 제공하는 형식으로 명령하여 작성하게 되었습니다.

#include<stdio.h>

//문제 : 사용자로부터 숫자를 입력받고, 이 숫자가 1부터 100사이의 범위에 있는지 검사하여
// 범위를 벗어나면 다시 입력을 요청하는 프로그램을 작성하세요

int main(){
    
    int number;

retry: // 1부터 100사이의 범위에 있는지 검사하여 범위를 벗어나면 retry
    printf("숫자를 입력해주세요 : ");
    scanf("%d",&number);

    if(number>=1 && number<=100){
        printf("입력한 양수는 범위 안에 있습니다.\n");
        printf("입력한 양수: %d\n", number);
    }else{
        printf("범위를 벗어났습니다. 다시 입력해 주세요.\n");
        goto retry;
    }
    
    return 0;
}
profile
안녕하세요

0개의 댓글