goto문 사용 금지의 실체(1)

by minakim / 2021. 07. 14. [05:12]

 

 

 

 

 
여러 개발자분들과 함께 일하다 보면 가끔 아래의 지침을 마음속에 품고 코딩을 하거나 코드를 리뷰하시는 분들이 있습니다.

"goto문은 절대 쓰면 안된다. 스파게티 코드가 되기 때문이다."

하지만 위의 표현은 정확한 표현이 아닙니다. 저라면 이렇게 표현할 것 같습니다.

"goto를 남용하면 안된다. 스파게티 코드가 되기 때문이다."

 

너무 모호한 표현인가요? 우선 저명한 분들이 남긴 goto에 대한 의견을 살펴보면서 코드를 예로 들어 상세히 설명하겠습니다.

 

 

goto문의 역사

 

최초의 프로그래밍 언어는 기계어에 가까운 언어, 즉 어셈블리어(assembly language)였습니다. 어셈블리어에서는 처음부터 while, if-else, for가 없었습니다. 지금도 없죠. if 조차도 if then goto만 가능하며, if then 뒤에 아무것이나 붙일 수는 없습니다.

제 기억이 틀릴 수도 있지만, 아마도 if 구문이 먼저 나오고 그 후에 if-else, while, for가 나오지 않았을까 추측합니다.

 

 

전산학의 대부였던 다익스트라(Dijkstra)는 이렇게 말했습니다.

 
 
 
 
 
"goto는 해롭다."

 

 

 

이 말에는 이런 속뜻이 있습니다.

 

 

"while, if-else, for는 제외하고 goto만 쓰지 말자."

 

다익스트라가 goto를 절대 쓰지 말라는 의미로 말하지는 않았을 거라고 생각합니다. 이 말은 무려 반세기도 전인 1968년에 한 말이니까요.

 

 

 

 

 

 

 

 

 

 

 

 

1990년대의 유명한 전사학의 대부인 크누스(Knuth)는 이렇게 말했습니다.

 

 

 

 
 
 

"언어 스펙이 발전한 지금은 goto가 나쁘다고만 할 수는 없다"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2000년대에 리눅스를 만든 장본인인 리누스(Linus)

 

 

"goto가 더 나을 때가 있기도 하다"고 말했습니다.

 

 

 

 

2010년대에 자동차 산업 소프트웨어 안정성 협회 (MISRA)는 "goto 금지는 이제 필수가 아닌 권고로 완화한다"고 명시하기도 했죠.

 

 

2021년인 지금도 우리는 주변에서 종종 "goto는 절대 금지"라는 맹목적인 의견을 내는 사람들이 있습니다.

 

 

이 글을 쓰는 저는 어땠을까요?

 

 

저도 한 때, goto는 절대 금지라는 말을 신봉했습니다.

 

 

 

 

 

 

 

 

 

왜 goto를 쓰지 말라고 했을까?

 

저도 왜 goto를 쓰지 말자는 주의가 팽배했었는지 모릅니다만, 짐작건대 구전되어 내려오면서 서서히 왜곡되었을 것으로 추측합니다. 그도 그럴것이 위의 두 문장인,

 

"goto문은 절대 쓰면 안된다. 스파게티 코드가 되기 때문이다."

 

 

"goto를 남용하면 안된다. 스파게티 코드가 되기 때문이다."

 

중에 그 어느 것도 goto를 어디서 부터 어디까지 쓰지 말아야 하는지를 명확하게 표현해주지 못하기 때문이죠.

 

 

프로그램을 구동하는 것은 기계이지만, 프로그램의 소스코드를 읽고 다루는 일은 사람이 합니다. 즉, 프로그램이라는 한 줌의 텍스트 파일은 우선적으로 사람에게 친화적이어야 합니다.

 

프로그램의 소스 코드가 몇 천줄을 넘어가기 시작하면, 코드를 작성하는데 소요되는 시간보다 기존에 만들어진 코드에 더 코드를 추가하거나 수정하는 데 훨씬 많은 시간이 들어가게 됩니다. 이쯤 되면 코딩하는데 20%의 시간을 쓰고 기존 코드를 읽는데 80%의 시간을 쓰게 됩니다.

 

학교에서 레포트를 제출하거나 단기 연구용 프로그램을 만들 때에는 읽기 쉬운 코드를 굳이 유지할 필요가 없지만, 다수가 참여하는 대규모 팀 프로젝트에서는 타인이 이해하기 쉬운 코드를 만드는 것이 중요해집니다.

 

 

 

 

"내가 누군가의 코드를 잘 이해한다는 것은, 코드를 잘 읽는 내 실력이 뛰어난 것이 아니라 그 코드를 잘 읽을 수 있도록 만든 그 작성자가 탁월한 것이다."

 

goto의 사용 여부는, 바로 이 관점에서 결정되어야 한다는 것이 저의 주장입니다.

 

글로만 설명하면 재미도 없고, 읽기도 힘드니 이 다음 편에서는 바로 코드 레벨의 예시와 함께 소개하도록 하겠습니다.

 

 

 

 

4. 개발 이야기

배현직님 저술 게임 서버 프로그래밍 교과서 우수학술도서 선정

by nettadmin / 2020. 07. 14. [10:00]

 
넷텐션 창립자 배현직님께서 저술한 "게임 서버 프로그래밍 교과서"가 대한민국학술원 자연과학 분야에 우수학술도서로 선정되었습니다.
이후 책은 인증마크와 함께 국내 도서관 및 학술원에 보급된다고 합니다.
네트워크 기초부터 고성능 서버 제작 기술까지 프라우드넷 개발자의 경험을 고스란히 담은 도서인만큼 서버개발자 분들에게 도움이 되었으면 좋겠습니다.

3. 넷텐션 뉴스

ProudNet Linux용 .NET Core 지원

by nettadmin / 2020. 07. 02. [07:49]

이제 프라우드넷이 리눅스용 닷넷코어를 지원합니다.

 

개발자분들은 개발하신 C# 서버를 리눅스에서 구동하시기 위해 mono를 쓰지 않으셔도 됩니다.

프라우드넷을 쓰면, mono를 이용하지않고도 닷넷코어만 사용해도 리눅스에서 구동가능한 C#서버를 개발하실 수 있습니다.

향후 마이크로 소프트는 기존 닷넷 프레임워크를 퇴역시키고 닷넷코어만 유지할 예정이니, 더욱 유용합니다.

 

자세한 사용법은 http://guide.nettention.com/csharp_ko#linuxdotnetcoreserver 를 참조하세요!

 

 

3. 넷텐션 뉴스

쉽게 알아보는 ProudNet

by nettadmin / 2020. 05. 22. [06:31]

 

 

안녕하세요 넷텐션입니다.

 

PoudNet 홍보 만화가 제작되었습니다.

ProudNet 이해에 작은 도움이 되길 바라겠습니다.

 

관련하여 문의사항은 license@nettention.com 으로 연락 부탁드립니다.

 

감사합니다.

1. 공지사항

ProudNet 개인 / 인디 라이선스 신청 기록

by nettadmin / 2020. 05. 22. [06:19]

 

 

안녕하세요 넷텐션입니다.

 

2015년 인디 사업자를 위한 인디 라이선스 무료 제공에 이어

2016년 개인 프로그래머를 위한 개인 라이선스 무료 제공에 이르기까지

 

많은 고객사와 고객님들의 성원이 있었습니다.

 

성원이 힘입어 더 좋은 게임 서버 네트워크 엔진을 만들 수 있도록 노력하겠습니다.

 

ProudNet은 게임 개발자 여러분을 응원합니다.

 

ProudNet 무료 신청 링크 : http://proudnet.com/proud-net

 

 

3. 넷텐션 뉴스

넷텐션 배현직 대표의 "기획자가 알아두어야 할 '서버 개발'에 대하여"에 대한 강연

by nettimays / 2019. 11. 19. [14:20]

지스타 2019의 컨퍼런스 GCONxIGC에서 발표되었던, 넷텐션 배현직 대표의 "기획자가 알아두어야 할 '서버 개발'에 대하여"에 대한 강연 기사를 공유드립니다.

기사 열기 

3. 넷텐션 뉴스

엔젤게임즈의 로드오브다이스

by haixing.lin / 2017. 01. 31. [10:31]

엔젤게임즈에서 프라우드넷을 사용한 게임 " 로드오브다이스"를 출시하였습니다!

기존 RPG와 차별화된 참신한 구성과 룰, 그리고 퀄리티 높은 디자인으로 즐겨보세요 ^.^

http://www.nocutnews.co.kr/news/4722939

2. 고객사 소식

나딕게임즈의 클로저스

by haixing.lin / 2017. 01. 09. [12:49]

나딕게임즈에서 ProudNet 사용 개발한 액션 MMORPG '클로저스' !

중국 유저들이 가장 기대하는 온라인 게임 '클로저스' 함께 알아보시죠^^

http://www.inven.co.kr/webzine/news/?news=170436&sclass=17


2. 고객사 소식

누리다의 구르카

by haley.choi / 2016. 07. 15. [04:38]

 누리다에서 프라우드넷을 사용한 게임 "구르카"를 출시하였습니다!

박진감 넘치는 FPS게임 구르카로 더위를 싹 날려보세요^.^

http://play.google.com/store/apps/details?id=com.Nurida.Gurkha

 

2. 고객사 소식

맥스온소프트의 소방 훈련 게임

by haley.choi / 2016. 07. 07. [12:56]

VR게임에도 ProudNet이 도입된 거, 모르셨죠? >.<

맥스온소프트에서 개발한 소방 훈련 게임에 ProudNet이 사용되었습니다Smile

http://www.etnews.com/20160215000233

2. 고객사 소식