코드를 작성하다가 이따금 내가 작성한 코드를 읽기 복잡할 때가 있다.
물론 내가 그 알고리즘이나 자료구조에 대한 공부를 하다가 만든 구현체이기 때문에 대개 이론의 이해가 덜 되서 헤매는 경우라곤 하지만 아무래도 코드를 빠르고 쉽게 읽을 수 있다면 각 자료형의 선언이나 함수의 사용 이유를 더 쉽게 파악할 수 있을 것이다.
사실 스스로 공부하는데 있어서 이해를 위한 끄적거림은 나만 알아봐도 상관없다고 생각한다. 그 끄적거림에 디테일을 추가한다거나 뭐...표현을 더 풍부하게 한다거나 하는 느낌을 더하는 건 귀찮고 피곤한 일이다.
하지만 프로그램의 작성에 있어서는 '나' 뿐만이 아닌 같은 공부를 하는 '타인'도 알아볼 수 있도록 짜면 좋다.
왜일까?
이건 순전히 '나'를 위해서이다. 타인도 알아볼 수 있게하기 위한 프로그램의 작성이 어째서 순전히 나를 위해서냐고 할 수 있겠지만 내가 생각한 나를 위한 이유는 몇 가지가 있다.
- 내가 작성한 코드라도 이 코드를 작성했다는 기억을 잊은 나는 그때의 내가 아닌 타인의 시선을 가진 나이기 때문에 나중에 다시 알아볼 수 있도록 함은 꽤 중요한 작업이라 생각한다.
- 내 방식대로 작성한 코드를 보고 남이 나와 똑같이 이해하기란 쉬운 일이 아니다.
- 내가 작성하던 프로그램을 이어 작성할 누군가는 지금껏 작성한 프로그램의 의도를 파악하기 쉬워야 한다.
되게 장황하게 늘여놨는데 간단히 말해서
사실 현 시점에서 내가 네이밍 컨벤션을 배워 적용시켜야겠다는 생각을 가진 이유는 1번+책에서의 조언 때문이다. 2,3번의 이유는 같은 일을 할 동료가 있어야하는데...아직 코린이 수준으로 독학하는 내게 이런 경험은 전무하다ㅠㅠㅠ
네이밍 컨벤션은 이름에 대한 규칙을 말한다.
여기서 어떤 이름에 대한 규칙을 정할 것이냐가 가장 큰 주제인데 프로그래밍에서 이름을 짓는다고 생각해보면 대개 자료형이나 함수, 객체 등이 이에 해당된다.
그렇다면 어떤 규칙이 있을 지 간단히 살펴보자.
CamelCase는 이름과 동일하게 낙타의 혹을 보고 이 모습을 본 따 만든 네이밍 컨벤션이다.
각 단어의 가장 앞 글자를 대문자로 사용해 가독성을 높인 방식이며 이 케이스의 경우, 함수의 이름을 명명하기에 유용하다.
다만 이 방식을 통해 이름을 정할 때, 이름에 두문자어가 들어간다면 두문자어를 모두 대문자로 사용해 이름을 정하는 것이 좋다. ex.) HTTPServerError(o) / HttpServerError(x)
UPPERCASE는 모든 글자를 대문자로 치환시킨 네이밍 컨벤션이다.
반대로 lowercase는 모든 글자를 소문자로 치환시킨 네이밍 컨벤션이다.
mixedCase는 이름의 가장 앞 글자를 소문자로 지정하지만 이후 나오는 단어의 앞 글자는 대문자로 치환시킨 네이밍 컨벤션이다.
CamelCase와 유사하게 생겼지만 CamelCase는 모두 단어의 앞 글자가 대문자라는 데에 있어서, mixedCase는 이름의 가장 앞 글자만 소문자라는데 있어서 차이가 있다.
생각보다 내가 함수 이름을 정할 때, 가끔씩 써먹었던 방법이다..ㅎㅎㅎ
대충 귀찮아서 변수의 이름 뒤에 언더스코어( _ )를 붙이곤했는데 이것도 파이썬의 기능과 겹칠 수 있어 지양하도록 안내하고 있다.
파이썬의 함수 사용 중 흔히 사용하는 생성자(init)의 형태는 언더스코어( _ )를 앞에 두 개, 뒤에 두 개 붙여사용하곤 한다. 이는 변수명이나 함수명을 지칭하는 데에 있어 충돌하거나 혼란을 줄 수 있어 이러한 선행 더블 언더스코어 & 후행 더블 언더스코어는 지양하도록 안내하고 있다.
이런 것까지??
이름을 정하는 데에 있어 필요한 규약, 규칙 정도로 볼 수 있는 네이밍 컨벤션은 자잘한 변수이름에도 소문자 l과 대문자 O는 사용 언어에 따라 1, 0과 혼동할 수 있어 이러한 소문자들의 사용도 지양하도록 안내하고 있다. 만약 l을 사용하고 싶다면 대문자 L을 사용하는 게 좋다.
사실 이런 컨벤션은 자잘하지만 꽤 유용하고 가독성을 높여주는데 도움을 주는 규약이다.
꼭 지켜야할 필요는 없지만 처음엔 한 번 쭉 읽어보고 이런 것들은 조심해야겠구나 하고 넘기는 수준 정도로 보면 좋을 것 같다는 생각이 들었다.
또 코딩을 하다가도 혹은 코딩이 끝나고도 컨벤션 자료를 보며, 내 코드를 다듬는 습관을 길러준다면 꽤 깔끔하게 정리된 모습이 보기 좋지 않을까? 싶다.
❗참고자료❗