고민?
1
2
3
4
5
6
String name;
int age;
boolean isMale;
List<String> names; // A
List<String> nameList; // B
- 이름만 보고도 타입을 유추할 수 있는 변수가 있는가하면, 리스트의 경우 A, B 둘다 괜찮아보이긴 하다.
- 기존 코드가 B로 작성되어있다. 일관성을 지키는게 좋은가.
헝가리안 표기법
: 좋은 IDE가 제공되기 이전 시대에 변수, 함수 네이밍에서 데이터 타입을 접두사로 명시하는 코딩 규칙.
lAccountNum
:l
을 통해long
타입 명시arru8NumberList
:arru8
을 통해 8비트 unsigned 배열 명시 (array of unsigned 8-bit integers)bReadLine(bPort,&arru8NumberList)
: 바이트를 반환하는 함수strName
: 스트링 타입 명시
헝가리안 표기법은 물리적인 타입뿐 아니라 변수의 목적도 드러낸다.
rw
: rowus
: 보안적으로 unsafe한 변수
현대적인 네이밍
: 아래의 이유로 굳이 옛날의 헝가리안 표기법처럼 변수, 함수명에 타입을 쓰지 않아도 된다는 의견이 많다.
- 언어가 발전하면서 현대에 사용되는 언어들은 타입 시스템이 굉장히 좋다.
- 좋은 IDE가 많다.
결론
names
와 같은 복수형에서는 리스트 or 배열인 경우가 많다. 일반적으로 복수형이라면 리스트라고 이해하는게 맞아보인다. set이나 map과 같은 자료구조가 사용된다면 그 때 더 구체적으로 네이밍해도 좋을 부분인 것 같다.- 리팩토링 관점에서도 개발을 진행하면서 점진적인 리팩토링을 하는 것은 맞아보인다. 코드 일관성도 중요하지만 어차피 나중에 다 바꾸기로 합의가 된 부분이라면 새로 개발하는 코드에서는 불편해하지 말고 그냥 결정한대로 개발하는게 좋을 것 같다.
Reference)
https://en.wikipedia.org/wiki/Hungarian_notation
https://stackoverflow.com/questions/10996681/good-name-for-a-list-variable-in-java