본문 바로가기

플밍 is 뭔들/Clean Code

1-1. 이름을 잘 짓는 간단한 규칙 (분명한 의도)

1. 분명한 의도
함수, 변수, 클래스 등에 존재 이유, 수행 기능, 사용 방법등에 대한 주석이 따로 필요하다면 의도를 분며이 드러내지 못했다는 것을 뜻한다. 물론 주석이 필요할 때도 있지만 주석을 최소화로 하여 코드를 읽기만 해도 대부분 이해가 되도록 의도를 명확하게 표현해야 한다. 이런 아무런 의미가 드러나지 않는 변수명보다는 다음과 같이 측정하려는 값과 단위를 표현하는 변수명이 좋다.

ex) 아무런 의미가 드러나지 않는 변수명

int d; //경과 시간(단위 : 날짜)

 

ex) 측정하려는 값과 단위를 표현하는 변수명

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

 

또한 분명한 의도를 가지고 이름을 지어주면, 같은 코드라도 이해도가 달라진다. 아래의 예를 보면 알 수 있다. 지뢰찾기 게임을 개발한다고 가정해보자.

public List<int[]> getThem(){
	List<int[]> List1 = new ArrayList<Int[]>();
	for (int[] x : theList){
		if(x[0] == 4){
			list1.add(x);
		}
	}
	return list1;
}

위의 코드를 보면 다음과 같은 의문이 든다.
 - theList에 무엇이 들었는가?
 - theList에서 0번째 값이 어째서 중요한가?
 - 값 4는 무슨 의미인가?
 - 함수가 변환하는 리스트 list1을 어떻게 사용하는가?

 

하지만 아래 코드를 보면 위의 코드에서 이름만 변경한것 뿐인데 위의 모든 의문들이 해결되었다.

public List<int[]> getFlaggedCells(){
	List<int[]> flaggedCells = new ArrayList<Int[]>();
	for (int[] cell : gameBoard){
		if(cell[0] == 4){
			flaggedCells.add(cell);
		}
	}
	return flaggedCells;
}

 - theList에 무엇이 들었는가?
    > gameBoard로써 지뢰찾기의 각 칸에 대한 정보가 들어있다.
 - theList에서 0번째 값이 어째서 중요한가?
 - 값 4는 무슨 의미인가?

if(cell[0] == 4){
	flaggedCells.add(cell);
}

  에서 보듯 0번째 값은 깃발이 꽂혀있는 상태가 들어있고 4는 깃발이 꽂혀있다는 것을 의미한다.
 - 함수가 변환하는 리스트 list1을 어떻게 사용하는가?
    > 깃발이 꽂힌 것을 확인할 때 사용한다.