일상다반사
좋은 코딩 스타일
흰쩜오
2019. 4. 5. 00:31
프로그래밍에 있어서 좋은 코딩 스타일은 입에 침이 마르도록 강조해도 지나치지 않다고 생각한다. 개발자로서 일을 하면서 코딩도 많이 했고 남의 코드 이해하려고 수많은 코드도 봐왔고 팀원들 코드 리뷰도 꽤 해오면서 느끼는게 많았다.
개인마다 코딩 스타일이 있고, 큰 소프트웨어 개발업체의 경우 회사 내에서 정한 코딩 스타일도 있다. 물론 잘 따르지 않고 쉽게 못 바꾸는 사람이 많지만...
갑자기 문득 떠올라서 자려고 누워서 급하게 글을 남긴다.
왜 좋은 코딩 스타일이 필요할까?
가독성이 떨어지는 코드는 생산성을 떨어뜨린다
이 가독성이라는 것은 타인이 내 소스코드를 볼 때 뿐만 아니라 작성한 자신에게도 해당이 된다. 처음에 코딩할 때야 빨리 작성해야 한다고 좋지 않은 코딩 스타일로 작성을 해놨다가 나중에 문제가 생겨서 확인하다보면 본인도 소스코드가 이해가 안 되서 시간낭비하는 경우가 허다하다.
디버깅이 어렵다
천재라고 할지라도 개발자에게 디버깅은 피하고 싶어도 피할 수가 없는 작업 중에 하나이다. 내가 디버깅하다가 가장 싫어하는 코드가 if문의 조건부분과 실행부분이 한 줄인거... 조건이 참이어서 실행부분으로 들어간건지 아닌지... return이라도 있으면 욕아온다. 강제로 되돌아 가지도 못 하니...
결국은 나중에 소스코드 정리하는 시간이 필요하다
테스트랍시고 대충 코딩해놨다가 막상 코드를 적용해야 할 때가 되어서 코드 정리한다고 시간이 또 필요하다. 그 시간만 쓰면 다행인데 정리하다가 잘못 고치면 됐던게 안 되는 상황이 발생하고 또 그거 찾는다고 되돌리고 난리가 나는 일이 발생할 것이다.
예상치 못 하는 버그가 발생할 소지가 높다
변수값이 유효한지 확인도 안 하고 사용하다가는 오작동하는 경우가 많다. C나 C++에서는 포인터를 쓰다가 memory access violation이 나서 프로그램이 죽어버리는 상황이 자주 발생한다.
내가 생각하는 좋은 코딩 스타일은??
변수명은 명확하게
타이핑이 귀찮다고 변수명 짧게 쓰지 말 것
변수명은 그것의 역할, 용도, 타입 등이 명확해야 한다. input인지 output인지, 정수인지 실수인지 문자인지, 등등
모든 변수는 초기화
변수를 선언함과 동시에 초기화할 것
특히 C나 C++에서 포인터 변수는 null로 초기화해야 한다. 그렇지 않으면 이 변수에 값이 쓰여져 있는지 아닌지 판단을 못 한다.
변수 사용 전 유효성 확인
특히 C나 C++에서 포인터 변수는 반드시 null인지 아닌지 확인 후 사용해야 한다. *과 ->를 사용할 때...
지나친 들여쓰기 자제
간혹 소스코드들을 보면 엄청난 if문과 for문으로 들여쓰기가 심하게 되어 있다. 이건 가독성도 떨어질 뿐더러 디버깅 지옥이 되어버린다. 그렇다고 if문과 for문이 여러 번 중첩되는데 들여쓰기 하지 말라는게 아니고 가능하면 if문과 for문 등을 여러 번 중첩해서 사용하지 않도록 작성해야 한다.
주석은 두말하면 잔소리
제발 주석 좀 달자
변수 역할까지 주석으로 달라고는 안 하지만 적어도 if문이나 for문이 무엇을 위한거고 어느 경우에 실행이 되는지 정도는 적어놔야 하지 않을까?
그리고 if문이나 for문이 여러 번 중첩되는 것이 불가피하면 해당 영역 끝에 이게 어느 if문이나 어느 for문의 끝이라는 걸 표시하는 것을 추천한다.
난 가끔 함수 안에 작성할 내용들을 주석으로 한줄씩 써놓은 다음 각 주석에 따라 코드를 작성한다. 그러면 내가 머리 속으로 생각해놨던 알고리즘이나 로직들을 코드로 옮기는게 수월하다.
게다가 헤더파일에도 주석을 달아놔서 해당 함수를 사용할 때 함수의 역할과 인자들의 역할을 이해할 수 있게 해야 한다. 작성해놓은 함수를 사용할 때 함수 구현부를 보고 이해하고 사용할 수는 없는 노릇이다.
조건문에는 변수만..
많은 사람들이 boolean을 반환하는 함수를 만들고 그 함수를 호출하는 코드를 조건문에 넣는다. 디버깅할 때 그 함수 안에까지 들어갔다 나오지 않는 이상 그 조건문이 참이 될지 거짓이 될지 알 수가 없다. 게다가 그런 코드가 한 조건문에 여러 개인 경우 도대체 어느 조건이 참이어서 다음 코드가 실행이 됐는지 결국 또 하나씩 안으로 들어가봐야 한다. 생각만해도 화가 난다. 가능하면 함수의 결과를 변수에 넣고 그 변수를 조건문에 쓰자.
생각나는대로 두서없이 적었는데 더 생각나는게 있으면 글을 수정할테고, 사실 내가 생각하는 좋은 코딩 스타일은 내 업무환경에서만 좋을 수도 있다. 예를 들어, 임베디드 프로그램이라면 최대한 가볍고 빠르게 동작할 수 있도록 코딩해야 되니 가독성이 좋은 코딩이 어려울 수 있다.
그러나 각 업무환경에 따라 최대한 좋은 코딩 스타일로 작성해야 되는 것은 맞지 않을까?