잘 짜여진 코드에서는 필요 없는게 맞을 것 같습니다.
하지만 누군가가 중구난방 만들어놓은 코드에 새로운 로직을 구현해야 하는 경우,
그런데 기존의 코딩의 구조를 바꾸는게 힘든 경우(전체 코드의 다른 부분과의 스타일의 통일성을 유지하기 위해), 어쩔 수 없이 goto가 반드시 필요했던 경험이 있었습니다.
그런데 그 goto 사용때문에 상사분께 엄청 혼났던..., 실컷 혼나고 나서 아무리 봐도 goto 밖에 답이 없어서 상사분께 그렇게 말씀드렸더니 하시는 말씀,
goto가 악이 아니라고 생각하기는 하지만, 가능한한 goto는 없애려고 노력합니다.
저같은 경우에는 리소스release나 다중loop탈출의 경우에도 가능한한 해당 기능을 함수로 분리해서 쓰려고 합니다.
개인적으로는 어느정도 중복을 허용하거나 return을 활용하는게, goto를 쓰는 것보다는 더 깔끔해보인다고 생각합니다.
------------------------------
How many legs does a dog have?
If you want to go somewhere,
If you want to go somewhere, goto is the best way to get there.
- Ken Thompson -
저는 goto 문이 필요한 곳이면 쓰려고 합니다만
사실 그런 필요성은 매우 가끔 나오는 정도죠.
개인적으로 함수내에서 goto 문 한번 정도 쓰는게(한번 이상은 솔직히 필요가....) 복잡하게 if else 꼬아서 탈출하는 것보다 훨씬 보기 좋다고 생각합니다.
goto가 더 좋을 때도 있어요.
보통 복잡한 case문(switch/if-else등)에서 공통 에러 처리 루틴으로 점프하게 할 때 많이 쓰지요.
제 경험상으로 말씀드리자면,
goto 문이라고 무조건 나쁜 것이 아닙니다.
backward goto가 나쁘고 forward goto는 상황에 따라서는 효율적입니다.
잘 짜여진 코드에서는 필요 없는게 맞을 것
잘 짜여진 코드에서는 필요 없는게 맞을 것 같습니다.
하지만 누군가가 중구난방 만들어놓은 코드에 새로운 로직을 구현해야 하는 경우,
그런데 기존의 코딩의 구조를 바꾸는게 힘든 경우(전체 코드의 다른 부분과의 스타일의 통일성을 유지하기 위해), 어쩔 수 없이 goto가 반드시 필요했던 경험이 있었습니다.
그런데 그 goto 사용때문에 상사분께 엄청 혼났던..., 실컷 혼나고 나서 아무리 봐도 goto 밖에 답이 없어서 상사분께 그렇게 말씀드렸더니 하시는 말씀,
"그렇구나"
goto 를 써서 코드가 더 간결해지고, 읽기
goto 를 써서 코드가 더 간결해지고, 읽기 쉬워진다면 쓰는게 맞습니다.
제 경험에 의하면, C/C++에서는 딱 두 가지 경우에 goto를 쓰는게 더 간결한 코드를 만들더군요.
1. error 처리를 하면서 resource 를 release할 때에.. (메모리 반환, 파일 닫기 등)
2. 다중 loop을 한꺼번에 빠져나오는 경우.
이 이외에는 goto를 써서 더 나은 경우를 아직까지는 못봤네요.
goto가 악이 아니라고 생각하기는 하지만, 가능한한
goto가 악이 아니라고 생각하기는 하지만, 가능한한 goto는 없애려고 노력합니다.
저같은 경우에는 리소스release나 다중loop탈출의 경우에도 가능한한 해당 기능을 함수로 분리해서 쓰려고 합니다.
개인적으로는 어느정도 중복을 허용하거나 return을 활용하는게, goto를 쓰는 것보다는 더 깔끔해보인다고 생각합니다.
------------------------------
How many legs does a dog have?
리소스release나 다중loop탈출의 경우
윈도우즈에서는 __try / __finally 용법으로 goto 없이 원하는 바를 이룰 수 있습니다.
윈도우즈 API에서 마음에 드는 한가지..
예외처리할때 goto 사용합니다. 함수 제일 하단에
예외처리할때
goto 사용합니다.
함수 제일 하단에 놓고
리소스 해제용도로 사용합니다.
명시적으로 goto 를 넣지는 않고
매크로에다 넣어서 사용하고 있네요.
댓글 달기