Naming for Variables
Tips for Naming variables
Intro
<코딩 제 1장 1절. 모든 것은 이름으로부터>
e.g.
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
안드로이드 앱을 개발하는 중 나는 위와 같은 코드를 작성해서 공유했다.
문제가 없어 보이겠지만 문제가 있다!
정확히는 listView1
과 같은 변수명에 대한 문제다.
- 코드를 실행할 때 문제가 생겨 수정하거나 디버깅할 때 정확히 할 수 있을까?
- 혼자가 아닌 다른 사람들과 협업을 할 경우, 이 변수의 이름을 쉽게 파악할 수 있을까?
- 변수 이름을 보고 정확히 그 쓰임을 알 수 없어, 전체 코드의 흐름을 파악해야한다는 문제를 야기한다. (시간도 많이 걸리고!)
- (+ 본인이 나중에 코드를 살펴볼 때도 기억이 나지 않으면 많은 시간이 소요된다!!)
그래서 변수명을 정하는 방법에 대해서 알아보려고 한다.
Tips for naming variables
Clear Name
이름은 명확해야 한다. 이 변수가 어떤 역할을 하는 것인지 명확하게 표현을 할 수 있어야 한다.
e.g.
public class ExpandableDataMaker {
public HashMap<String, List<String>> getData() {
HashMap<String, List<String>> expandableListDetail = new HashMap<>();
// ...skip...
return expandableListDetail;
}
}
ExpandableDataMaker
라는 class를 생성해, 특정 ExpandableList를 만드는데 사용을 했다. (위의 exampled에서 Test1의 하위 리스트를 만드는 것이라고 가정) 이 경우 모든 ExpamdableList를 설명하는 것이 아닌 특정 항목에 대한 것을 설명하는 기능인 것이다. 이에 좀 더 변수명을 잘 정하고자 한다면, 변수를 이 기능을 설명하는 것으로 바꾸어야 한다.
(나도 아직 부족해서 무엇이 맞는지는 모르지만 아마도 만든다면 MenuDataMaker
와 같은 느낌으로 만들지 않을까 싶다 ㅎㅎ)
Reader’s Point of View
독자의 관점에서 보기 쉬워야 한다. 여기서 말하는 독자는 나를 포함한다. 미래의 내가 봤을 때도 쉽게 잘 파악할 수 있어야 하며, 다른 사람이 보기에도 쉽게 파악할 수 있어야 한다.
e.g.
String[] appList;
ListView applist = // ..skip...
위와 같은 상황에서 appList와 applist는 처음 코드를 작성할 때에는 Array
와 Listview
로 나누어서 인식할 수 있다. 하지만 코드의 아래쪽에서 이 변수들을 기억할 수 있을까?(응,,,기억할 수 있을지도?) 부정확하다면 다시 위로 올라와서 각각의 변수의 정의를 확인해야 할 것이다. 즉, 나를 위해서라도 다시 한 번 Clear Name은 중요하다는 것이다.
독자의 관점에서 꼭 생각해보자! 이 이름을 나중에 봤을 때도 잘 기억할 수 있는지!
References
- Go Variable Naming Rules
- Data Scientists, Your Variable Names Are a Mess. Clean Up Your Code.
- 변수명을 잘 짓기 위한 몸부림
- Good naming is a process, not a single step
- Naming as a Process
- Rules of naming variables
- 좋은 코드를 위한 자바 변수명 네이밍
- Tips for Writing Effective Variable Names
P.S. 아무튼 변수 이름이 정말 중요하다는 것! 좋은 습관을 위해서 저도 노력해보겠습니다😉 추가로 더 알게 되는 내용이 있다면 업데이트 하겠습니다! =)