"goto가 더 나을 때가 있기도 하다"고 말했습니다.
2010년대에 자동차 산업 소프트웨어 안정성 협회 (MISRA)는 "goto 금지는 이제 필수가 아닌 권고로 완화한다"고 명시하기도 했죠.
2021년인 지금도 우리는 주변에서 종종 "goto는 절대 금지"라는 맹목적인 의견을 내는 사람들이 있습니다.
이 글을 쓰는 저는 어땠을까요?
저도 한 때, goto는 절대 금지라는 말을 신봉했습니다.
왜 goto를 쓰지 말라고 했을까?
저도 왜 goto를 쓰지 말자는 주의가 팽배했었는지 모릅니다만, 짐작건대 구전되어 내려오면서 서서히 왜곡되었을 것으로 추측합니다. 그도 그럴것이 위의 두 문장인,
"goto문은 절대 쓰면 안된다. 스파게티 코드가 되기 때문이다."
와
"goto를 남용하면 안된다. 스파게티 코드가 되기 때문이다."
중에 그 어느 것도 goto를 어디서 부터 어디까지 쓰지 말아야 하는지를 명확하게 표현해주지 못하기 때문이죠.
프로그램을 구동하는 것은 기계이지만, 프로그램의 소스코드를 읽고 다루는 일은 사람이 합니다. 즉, 프로그램이라는 한 줌의 텍스트 파일은 우선적으로 사람에게 친화적이어야 합니다.
프로그램의 소스 코드가 몇 천줄을 넘어가기 시작하면, 코드를 작성하는데 소요되는 시간보다 기존에 만들어진 코드에 더 코드를 추가하거나 수정하는 데 훨씬 많은 시간이 들어가게 됩니다. 이쯤 되면 코딩하는데 20%의 시간을 쓰고 기존 코드를 읽는데 80%의 시간을 쓰게 됩니다.
학교에서 레포트를 제출하거나 단기 연구용 프로그램을 만들 때에는 읽기 쉬운 코드를 굳이 유지할 필요가 없지만, 다수가 참여하는 대규모 팀 프로젝트에서는 타인이 이해하기 쉬운 코드를 만드는 것이 중요해집니다.
"내가 누군가의 코드를 잘 이해한다는 것은, 코드를 잘 읽는 내 실력이 뛰어난 것이 아니라 그 코드를 잘 읽을 수 있도록 만든 그 작성자가 탁월한 것이다."
goto의 사용 여부는, 바로 이 관점에서 결정되어야 한다는 것이 저의 주장입니다.
글로만 설명하면 재미도 없고, 읽기도 힘드니 이 다음 편에서는 바로 코드 레벨의 예시와 함께 소개하도록 하겠습니다.