4. 단수와 복수를 구분하자

2024. 2. 25. 10:21좋은 코드 (Good Code)/좋은 이름 (Good Name)


Singular vs Plural

 

일상 생활 속에 단수와 복수는 굉장히 중요하다.

오늘 아침에 해가 밝았다

가 자연스럽지

오늘 아침에 해들이 밝았다

라고 표현하면 너무 어색하다.

해는 한 개 일 수 밖에 없기 때문이다.

 

우리가 변수를 사용할 때는 자료형을 계속 명시하지 않는다.

그렇기에 코드를 읽을 때도 자료형은 선언 때 빼곤 보이지 않는다.

 

자. 정리하면

코드를 작성함에 있어서 변수가 중요한 건 우리 모두 알고 있고

변수 이름이 단수 또는 복수인지에 따라 코드 표현이 어색해지는 지 보이고

실제로는 단수인데 복수처럼 써도 우리는 변수 선언 시절을 기억하지 않기 때문에 모른다.

 

우리는 이름에 정말 중요한 표현 양식을 줘야 한다.

많은 방법이 있겠지만, 가장 쉽고 많은 경우를 포용하는 건 단수, 복수 구분이다.

 

 

 

 

 


Object

 

시작부터 말하면, 문법적 오류보다 코드적 표현이 더 중요하다.

저기에 물들이 있어

라는 문장이 있다면 '물은 셀 수 없는데 왜 물들이라고 표현하는 거지...?' 라고 문법적 오류를 지적할 수 있다.

 

우리 세계로 보면

baekWater = BaekWater()
sambaWater = SambaWater()
waters = [baekWater, sambaWater]

print(f"there are {waters}")

 

말이 된다.

 

여기서 Water이 아니라 WaterBottle 이런 식으로 써야된다고 한다면, 얼른 손절하길 바란다.

baekWaterBottle = BaekWater()

 

자세하게는 다음에 말하겠지만, 본래 이름과 다른 이름을 붙이는 것 만큼 끔찍한 일은 없다.

그게 셀 수 있든 없든 거지같던 지 간에 최초로 지은 이름은 그대로 사용해야 한다.

 

좋은 코드 중에는 이름이 이상한 건 없다.

역으로 이름이 이상한 건 좋은 코드가 아니다.

이름이 이상하다는 건 사용하지 말라는 것과 같다.

그러니 제발 우리는 뭐가 되었든 최초로 지은 이름을 그대로 사용해야 한다.

 

1개는 단수다.

baekWater = BaekWater()

 

2개 이상은 복수다.

waters = [baekWater, sambaWater]

 

분명히 말하고자 하는 바는, 아래처럼 사용하지 말라는 이야기이다.

water = [baekWater, sambaWater]

print(f"there are {water}")

 

 

정리해보면 결국 객체가 1개인지 2개 이상인지로 구분할 수 있어 보인다.

그렇다. 그렇게 구분하면 된다.

이렇게만 해준다면 대부분의 단수 복수 문제는 해결된다.

 

 

 

 

 

 


Data Type

 

단수냐 복수냐 문제는 사실 데이터 타입을 암시하는 데 큰 의미가 있다.

다시 한 번 말하지만, 함수 내용을 읽으면서 우리는 자료형을 기억하지 못한다.

하지만 일종의 연상법을 사용하면 기억하는 놀라운 일이 생기는데,

단수 복수 뿐 아니라 조그만한 단어를 힌트처럼 뒤에 붙여주면 된다.

 

경험적으로는 4개 밖에 없었다.

  표현 방법 예시
객체 1개 단수 water
배열 (List, Set) 복수 waters
맵 (Map) 키 And 값 + Map labelAndWaterMap
기타 자료구조 단수 + 자료구조 이름 waterQueue

 

이정도만 해도 99.9%의 이름들을 결정할 수 있다고 본다.

 

다만 Map이라는 용어는 일관성있게 본인이 결정해도 된다.

예를 들어 파이썬에서 맵은 주로 dictionary니까, labelAndWaterDict로 써도 된다.

 

 

 

 

 

 


Summary

 

  1. 1개는 단수, 2개 이상은 복수다.
  2. 자료형을 암시하는 이름이 좋다.