본문 바로가기
Book/Clean Code

클린코드 2장

by be_beee 2022. 3. 22.

의미 있는 이름을 짓는 규칙

  • 의도를 분명히 밝혀라 : 코드의 함축성을 살려야 한다. 코드에 목적에 관한 정보가 명확히 드러나는 것이 중요. 코드를 읽는 것만으로도 함수가 하는 일을 이해하기 쉬워야 한다.
func getFlaggedCells() -> [Cell] {
	var flaggedCells:[Cell] = [];
	for cell in gameBoard {
		if cell.isFlagged() {
			flaggedCells.append(cell);
		}
	}
	return flaggedCells;
}
  • 그릇된 정보를 피하라 : 그릇된 단서는 코드의 의미를 흐린다. 유사한 개념은 유사한 표기법을 사용해야한다. 반대로 유사하지 않은 개념에 유사한 표기법은 그릇된 정보일 수 있다.
  • 의미있게 구분하라 : 단순 철자 수준의 구분, 관용어 붙이기, 숫자 붙이기 등은 아무런 정보도 제공하지 않는다. Account와 AccountInfo는 서로 구분이 되지 않는다. 제3의 읽는 사람(타인)이 차이를 알도록 이름을 지어야한다.
  • 발음하기 쉬운 이름을 사용하라 : 프로그래밍은 여러 개발자들 간의 협력과 소통을 필요로 하는 사회 활동이다. 발음하기 쉬운 이름은 지적인 대화가 가능하게 하며 소통을 매끄럽게 해준다.
  • 검색하기 쉬운 이름을 사용하라 : 문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않는다. 하나의 변수나 상수를 코드 여러 곳에서 사용한다면, 즉 변수 사용 범위가 크다면 이름 길이 역시 이에 비례하여 길어야한다.
  • 인코딩(변수명에 추가적인 정보 표기를 위해 접두어 또는 접미어를 붙이는 것을 의미하는 듯..)을 피하라 : 이름에 인코딩할 정보는 원래도 아주 많으며, 부가적인 인코딩은 개발자에게 불필요한 정신적 부담을 줄 수 있다. 인코딩은 반드시 필요한 경우만 사용하는 것이 좋다.
  • 자신의 기억력을 자랑하지 마라 : 독자가 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면 그 변수 이름은 바람직하지 못하다. 남들이 이해하는 코드를 내놓아야 한다.
  • 클래스 이름: 클래스 이름과 객체 이름명사, 명사구가 적합하다. Customer, WikiPage, Account, AddressParser 등이 좋은 예.
  • 메서드 이름: 메서드 이름동사, 동사구가 적합하다. postPayment, deletePage, save 등이 좋은 예. 접근자, 변경자, 조건자는 값 앞에 get, set, is를 붙인다.
  • 한 개념에 한 단어를 사용하라 : 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스러워진다.
  • 말장난을 하지 마라 : 위의 규칙과 반대 개념의 규칙. 한 단어를 두가지 이상의 목적으로 사용하지 말아야 한다. 지금까지 구현한 add라는 메서드는 기존 값 두개를 더하거나 이어서 새로운 값을 만드는데, 새로운 메서드는 집합에 값 하나를 추가하는 일을 한다면 다른 이름을 붙여줘야한다. 둘은 엄연히 하는 일이 다르다.
  • 해법 영역에서 가져온 이름을 사용하라 : 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어를 변수명으로 사용해도 괜찮다. 기술적인 개념을 갖고 있는 변수라면 기술 이름이 제일 적합하다.
  • 문제 영역에서 가져온 이름을 사용하라 : 적절한 프로그래밍 용어가 없다면 문제 영역에서 이름을 가져온다. (사실 몬 말인지 모르겠음ㅎㅎ;;)
  • 의미 있는 맥락을 추가하라 : 대다수의 이름은 의미가 분명하지 않다. 그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다. 모든 방법이 실패하면 접두어.
  • 불필요한 맥락을 없애라 : 불필요하게 추가된 접두어는 중복을 발생시켜 의미를 헷갈리게 만든다.