coding convention 코딩 지침

justyoon·2023년 3월 23일
0

AI5 Python/Django

목록 보기
20/31

지난 프로젝트때 팀원들과 의논하며 진행했던 프로젝트 코드를 며칠 뒤 보게되었다.
주석이 달린 코드도 있었지만 별도의 주석이나 설명이 없는 곳은
무슨 생각으로 이런 코드를 사용했지?
떠오르지 않아 이해하는데 상당한 시간과 에너지를 허비했다.
컨벤션이 무엇인지 찾아보고 정리해보았다.

컨벤션이란

여기서 말하는 컨벤션은 코드에 대한 내용이므로 이하 컨벤션으로 줄여 부른다.

컨벤션은 해당 언어로 작성된 프로그램의 각 측면에 대한 프로그래밍 스타일, 사례 및 방법을 권장하는 특정 프로그래밍 언어에 대한 일련의 지침입니다.
이러한 지침은 일반적으로



이는 소프트웨어의 구조적 품질에 대한 지침들로
소프트웨어 프로그래머들은 소스코드가독성을 높이고 소프트웨어 유지 관리를 더 쉽게 하기 위해 이러한 지침을 따르기를 적극 권장합니다.

컨벤션은 소프트웨어 프로젝트의 유지 관리자 및 동료 검토자에게 해당됩니다.

컨벤션은 팀이나 회사가 따르는 일련의 문서화된 규칙으로 공식화될 수 있지만
개인의 습관적인 코딩처럼 형식이 없을 수도 있습니다.

컨벤션은 컴파일러 에 의해 시행되지 않습니다.

사용해야 하는 이유

그렇다면 왜 이런 선택지를 통일해야 할까요?
불행히도 우리가 작성한 코드는 많은 사람들이 보게 됩니다.
같이 일하는 동료, 이바지하고 있는 프로젝트의 리뷰어, 심지어 내일의 자기 자신까지도 말이죠.
그런데 이런 많은 사람들이 우리가 코드를 작성할 때 했던 선택지를 일일이 추론해서 이해하는 건 굉장히 피곤하고 짜증 나는 일입니다.
그래서 우리는 사소한 것부터 일종의 규칙을 정해서 이런 짜증과 불편함을 줄이려는 겁니다.
또한, 일반적으로 좋은 기준에는 훌륭한 프로그래머들의 좋은 습관이 배어있기 때문에 더 나은 품질의 코드를 작성하는 데에도 많은 도움이 됩니다.

아직은 큰 문제를 느끼지 못했지만 심상치 않은 짤들

(밈이 아니니까)

찾아보니 언어에 따라 요구하는 내용이 다르기 때문에, 사용하는 언어에 따라 컨벤션 스타일을 맞추어 코드를 작성한다고 한다.
이러면 여러 언어를 사용하는 프로젝트 때는 미리 규칙을 합의하는 게 더욱 중요하겠다.


대표 케이스

일단 현재 메인 개발언어로 사용중인 언어는 python 이다.
python변수/함수 네이밍Snake Case
클래스를 네이밍 할 때 Pascal Case를 사용한다.

camelCase (lowerCamelCase)

낙타의 쌍봉과 같이 문자열의 첫 문자를 제외하고
단어의 첫 글자마다 대문자로 표현하는 방식입니다.
많은 프로그램 언어에서 컨벤션으로 사용됩니다.

  • 용도 : 오브젝트, 함수, 인스턴스
  • 변환 전 : My Visitor Count
  • 변환 후 : myVisitorCount

PascalCase (Upper Camel Case)

카멜 케이스와 유사하지만 첫 문자도 대문자로 표현합니다.

  • 용도 : OOP(객체지향 프로그래밍)의 클래스나 constructor명
  • 변환 전 : My Visitor Count
  • 변환 후 : MyVisitorCount

kebab-case

생각하는 그 먹는 케밥이 맞습니다.
카멜 케이스와 달리 모두 소문자로 표현하며
단어와 단어 사이를 대시 (-) 를 이용하여 구분합니다.
스프링의 yml파일이나 url주소에서 사용됩니다.

  • 용도 : CSS의 class명, WEB URL
  • 변환 전 : My Visitor Count
  • 변환 후 : my-visitor-count

snake_case (POTHOLE_CASE)

케밥의 대시 (-) 와 다르게 언더스코어 (_) 를 구분자로 합니다.
모든 문자를 대문자로 나타내는 방식도 사용되며 주로 상수 표현 시에 사용됩니다.

  • 용도 : DataBase의 Table명과 Column명
  • 변환 전 : My Visitor Count
  • 변환 후 : my_visitor_count
  • 변환 후 : MY_VISITOR_COUNT

그외

CONST 상수

변치않는 상수를 표현할 때는 예외적으로 모든 문자를 대문자로 표현합니다.
또한 전역적으로 사용시 전체 코드에 영향을 줄 수 있으므로
기본적으로 모듈 단위에서 정의하기를 권장합니다.

PIE = 3.14

list 여러 자료

list를 표기할 때는 s를 붙여 복수 로 표현하거나
number_list 와 같이 표현할 수도 있습니다.
기본적으로 혼용하지 않고 하나를 정해 사용합니다.

numbers = [1,2,3,4]
# or
number_list = [1,2,3,4]

for 반복

반복되는 코드 작업은 for 반복문을 사용하여 가독성을 늘릴 수 있습니다.

for number in numbers:
...

func함수, method메서드

함수/메서드를 네이밍할 때는 해당 함수가 어떤 역할을 하는지 표현해야 합니다.

def add(a, b): return a + b

이렇게 문서화 문자열 Docstring을 사용하여 설명을 작성할 수도 있습니다. (참고 PEP257)

# django rest framework의 serializer 코드 일부

class ModelSerializer(Serializer):
    def validate(self, attrs):
        """
        입력 된 데이터의 유효성을 검증하는 메소드입니다.
        Args:
            attrs : 검증할 데이터(attribute)입니다.
        """

    def create(self, validated_data):
        """
        유효성 검증(validate) 후 instance를 생성할 때 사용되는 메소드입니다.
        Args:
            validated_data : validate의 attrs에서 검증 된 데이터들이 담깁니다.
        """

    def update(self, instance, validated_data):
        """
        생성 된 instance를 수정할 때 사용되는 메소드입니다.
        Args:
            instance : 수정 할 대상입니다.
            validated_data : validate의 attrs에서 검증 된 데이터들이 담깁니다.
        """

추가적인 함수 명명 지침


결론

사실 나 혼자서 코드를 본다면 전혀 상관이 없다.
하지만 대부분은 나의 코드가 외부에 공개되기 마련이다.
꼭 협업이 아니더라도 다른 사람들이 나의 코드를 이해함에 있어서
불필요한 에너지 소모가 없으려면 기본적인 컨벤션은 지켜야 한다.

이 코드가 무슨 코드인지는 오직 신과 나만이 안다 그리고 이제는 오직 신만이 아신다.

프로그램은 사람들에게 읽히기 위한 목적으로 만들어져야 하고 우연히 컴퓨터가 실행할 수 있다면 충분하다.

컨벤션을 이해한다면 위 상황은 꽤나 끔찍하게 들린다.
당연히 취업시 제출하는 포트폴리오에 네이밍 컨벤션을 지키지 않은 코드가 있다면
매우 많이 감점❗ 된다고 한다.
생각해보면 누가 저런 동료와 같이 일하고 싶을까
그러니 컨벤션을 잘 활용합시다.

profile
with gratitude, optimism is sustainable

0개의 댓글