2024. 2. 15. 07:46ㆍ좋은 코드 (Good Code)/좋은 이름 (Good Name)
Noun vs Verb
솔직히 나는 어학 박사가 아니기 때문에 명사와 동사의 엄밀한 차이는 모른다.
그냥 명사는 어떤 물건이나 정지된 무언가를 의미하고
동사는 해당 명사가 움직이는 행위를 의미하는 것 같다.
장담컨데, 세상의 99.9%의 코드는 이 정도만 알아도 된다.
즉 누가 그 코드를 짰던 지 간에 명사와 동사로 구분할 수 있다는 것이다.
왜 우리는 코드에 명사와 동사를 구분해서 넣을까?
그건 우리가 어떤 무언가를 만들어서
나름 그 자체에 이름을 붙여두고
그 무언가가 동작하는 행위도 이름을 만들고 싶어하기 때문이다.
다음 두 예문을 코드로 표현해보자
고양이 색깔은 하얀색입니다
cat_color = 'white'
고양이 색깔을 말합니다.
def say_cat_color(color: str):
print(color)
고양이 색깔에 이름을 붙여두고
그 이름을 말하는 행위도 이름을 붙였다.
너무 어렵게 생각하지 말자.
우리가 그 이름을 불렀을 때, 정지되거나 움직이거나 둘 중 하나다.
정지된 건 명사고, 움직이면 동사다.
본인이 이 두 가지를 구분해서 잘 쓰고 있었다면 이 다음부터는 안 읽어도 된다.
정말 이게 전부다.
Function = Verb
아직도 내가 동사와 명사로 이름을 잘 못 짓겠다 한다면 위 공식을 기억하자
함수가 명사가 되는 걸 본 적도 상상해본 적도 없다. 즉 반례가 없다.
아래처럼 만든 함수를 호출하면 도대체 뭘 할 지 상상이 가는가?
def cat_color(...
함수는 무언가 동작한다는 것이다.
함수 내용에는 객체의 속성을 바꿀 수도 있고, 단순 계산으로 결과값을 반환해줄 수도 있다.
뭐가 되었든 주어진 절차대로 한 줄 한 줄 착실히 동작할 것이다.
동작이라는 건 동사다.
그러니 응당 아래처럼 써야 맞다.
def draw_cat_color(...
def print_cat_color(...
def set_cat_color(...
이제 말이 된다.
만일 어떤 경우에는 무조건 함수 이름이 명사가 되어야 한다고 한다면,
그건 애초부터 함수로 만들 게 아닌 것이다.
그리고 함수가 아닌 나머지는 그냥 명사로 만들자.
Naming Order
이제 명사와 동사를 구분할 줄 안다면, 다음부터는 순서를 따져보자.
나는 주로 명사를 맨 마지막에 두는 편이다.
beautiful_cat_color = 'rainbow'
형용사나 지명은 앞에 차례대로 나열하고 가장 중요한 주체는 맨 마지막에 둔다.
원래 영어를 읽을 때도 이렇게 읽기 때문에 편하다.
아래처럼 읽으면 조금 어색하다.
beautiful_color_of_cat = 'rainbow'
하지만 이렇게 쓴다고 굳이 태클을 걸 마음은 없다.
문제는 아래처럼 사용하는 경우다.
beautiful_dog_color = 'rainbow'
beautiful_color_of_pony = 'rainbow'
이런 이름들을 보면 정말 난감하다.
단어 배열 순서가 서로 다르다면, 응당 의미도 다를 것이라 기대하기 때문이다.
코드는 책을 쓰는 것과 다르다.
언어적 유희를 마음껏 발휘해도 되는 장소가 아니라 - 어떻게하면 술술 잘 읽어내려갈 지에 초점을 먼저 맞춰야 한다.
그리고 여기서 가장 중요한 건 일관성이다.
본인이 명사끼리 배치를 어떻게 할 지 결정했다면, 모든 배치를 그렇게 해야 된다.
동사도 마찬가지다.
나는 주로 동사는 맨 앞에 두는 편이다.
draw_cat_color(...
이렇게 하면 첫 시작부터 이게 함수인지 변수인지 구분하기가 편하다.
또 그대로 읽으면 - 그대로 영작이 되기도 한다.
그렇기에 이렇게 쓰는 건 피하길 바란다.
cat_color_draw(...
draw가 그리다라는 동사도 있지만, 그림이라는 명사도 되기 때문에 살짝 애매해진다.
일전에도 말했지만 애매한 표현은 최대한 피하는 게 좋다.
Summary
1. 명사와 동사를 구분하자
2. 함수는 동사로 이름을 짓는다
3. 단어 순서를 일관성있기 유지하자
'좋은 코드 (Good Code) > 좋은 이름 (Good Name)' 카테고리의 다른 글
6. 쓰다가 마는 건 용납하지 못한다 (0) | 2024.03.03 |
---|---|
5. 이름을 만들어주자 (0) | 2024.02.25 |
4. 단수와 복수를 구분하자 (1) | 2024.02.25 |
2. 애매모호함을 버리자 (1) | 2024.02.14 |
1. 어쨌든 이름은 이해할 수 있어야 한다 (1) | 2024.02.13 |