goto

goto를 return/RAII/switch로 대체

C++의 goto는 같은 함수 안 label로만 이동하고, 초기화된 지역 변수의 스코프 안으로 뛰어드는 코드는 컴파일러가 막는다. 정리 목적 점프는 RAII, 중첩 탈출은 함수 return, 상태 전이는 switch로 바꾸는 편이 안전하다.

01

점프 목적 분류

오류 정리, 중첩 루프 탈출, 상태 머신 전이 중 무엇을 표현하려는지 먼저 나눕니다.

02

조기 return

루프 검색이나 검증 로직을 함수로 빼면 flag 변수와 goto label 없이 결과를 반환할 수 있습니다.

03

RAII 보호 규칙

정리 목적 goto는 unique_ptr, vector, lock_guard처럼 소멸자가 해제하는 타입으로 사라지는 경우가 많습니다.

error cleanup
RAII로 해제 경로 통합 여러 실패 지점에서 같은 delete, fclose, unlock을 호출하려는 코드는 소멸자에 맡깁니다.
누락 해제와 이중 해제 감소
반복 탈출
함수 분리 + return 중첩 루프 탈출은 별도 함수의 return true/false가 break label보다 읽기 쉽습니다.
flag 변수 남발 방지
state machine
enum class + switch label 점프보다 상태값과 전이 조건을 switch case로 드러내면 디버깅 지점이 분명합니다.
전이 조건 추적 가능
범위 규칙
초기화 스코프 진입 금지 goto는 초기화가 필요한 지역 변수의 범위 안으로 뛰어들 수 없어 컴파일 오류가 납니다.
jump bypasses initialization

error label · 반복 탈출 · state machine 점검

raw cleanup label goto가 자원 해제를 위해 쓰였다면 RAII 타입으로 바꿀 수 있는가.
nested loop return 루프를 함수로 빼면 return 하나로 끝나지 않는가.
enum state label 이름만 보고 다음 상태와 종료 조건을 이해할 수 없다면 switch 상태표가 낫습니다.

함수로 접기

bool contains(const Grid& grid, int target) {
    for (const auto& row : grid)
        for (int value : row)
            if (value == target) return true;
    return false;
}