[클린코드]2장. 의미있는 이름
2024-08-01
-
의도를 분명히 밝혀라
-
의도가 분명한 이름을 사용하면 코드가 명확해진다.
public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x) return list1; } public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell) return flaggedCells; }
아래의 코드가 훨씬 명확하게 읽기 쉽다. (list1이 어떤 값을 담는지, theList가 무엇인지, 4의 의미가 무엇인지 명확함)
-
-
그릇된 정보를 피하라
- 널리 쓰이는 단어를 다른 의미로 사용하지 마라
- 실제 List 타입이 아니라면 변수에 List를 넣지 마라(accountList -> accountGroup, bunchOfAccounts, accounts)
- 비슷한 이름을 사용하지 않도록 주의해라
- 유사한 개념은 유사한 표기법을 사용한다(자동완성 기능을 사용할 때 유용해짐)
- 소문자 L이나 대문자 O를 변수명으로 사용하지 마라(숫자 1, 0과 헷갈림)
-
의미있게 구분하라
- 다른 두 개념에 같은 이름을 사용하기 위해 숫자를 덧붙인다던가 불용어를 추가하지 마라(a1, a2, a3... / ProductInfo, ProductData)
- Info, Data는 의미가 불분명한 불용어이다.
- NameString -> Name : Name이 부동소수가 될 일이 없다.
- customer, customerInfo / account, accountData / theMessage, message 는 의미의 구분이 어렵다. 읽는 사람이 차이를 알도록 이름을 지어라.
- 다른 두 개념에 같은 이름을 사용하기 위해 숫자를 덧붙인다던가 불용어를 추가하지 마라(a1, a2, a3... / ProductInfo, ProductData)
-
발음하기 쉬운 이름을 지어라
- 약자 말고 되도록 단어로
-
검색하기 쉬운 이름을 사용해라
- 문자 하나를 사용하는 이름과 상수는 검색이 힘들다. 여러 곳에서 사용할수록 검색에 쉬운 이름을 사용해라
-
인코딩을 피하라
- 헝가리식 표기법: 타입을 변수명에 포함하는 표기법인데, 언어와 IDE의 발전으로 현재는 필요가 없다.
- 인터페이스 클래스와 구현 클래스
인코딩이 필요한 경우이다. 인터페이스 클래스는
ShapeFactory
, 구현 클래스는ShapeFactoryImp
로 구현 클래스를 인코딩한다.
-
클래스, 객체 이름: 명사나 명사구
-
메서드 이름: 동사나 동사구
생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다. 메서드는 인수를 설명하는 이름으로
Complex fulcrumPoint = new Complex(23.0); Complex fulcrumPoint = Complex.FromRealNumber(23.0); // 이 코드가 더 좋다.(생성자는 private으로 선언하여 사용을 제한할 수 있음)
-
기발한 이름은 피해라
- 특정 그룹, 문화권에서만 이해하는 이름, 농담은 피해라
-
한 개념에 한 단어를 사용해라
- 똑같은 개념을 사용할 때마다 다른 이름으로 사용하면 혼란스럽다. 일관된 단어를 사용해야 한다. (fetch, retrieve, get / controller, manager, driver)
-
말장난 하지 마라
- 한 단어를 두 가지 목적으로 사용하지 마라.
- 두 값을 더하거나 이어서 하나의 값으로 만드는 메서드에 add라는 단어를 썼다면, 집합에 새로운 값을 추가하는 메서드는 add 대신 insert, append를 사용하는 것이 낫다.
- 한 단어를 두 가지 목적으로 사용하지 마라.
-
해법 영역에서 가져온 이름을 사용해라
- 프로그래밍 관련 기술 개념 용어는 사용해도 좋다.
-
문제 영역에서 가져온 이름을 사용해라.
- 적절한 프로그래밍 용어가 없고, 문제 영역과 관련이 깊은 코드라면 문제 영역에서 사용하는 용어를 사용할 수 있다.
-
의미 있는 맥락을 추가하라
- firstName, lastName, street, houseNumber, city, state, zipcode 전체를 보면 주소에 대한 값인 것을 알 수 있지만 state 하나만 본다면 무엇을 의미하는 값인지 알 수 없다. 이런 경우 addr이라는 접두사를 추가하여 맥락을 좀 더 분명하게 할 수 있다.
-
불필요한 맥락을 없애라
- ABC라는 애플리케이션을 짠다고 모든 클래스 이름를 ABC로 시작하는 것은 바람직하지 못하다.
생각 정리
- 변수 이름을 내가 의도한대로 잘 사용하려면 영어 단어 공부가 필수겠다.
- 알고 있는 것도 있었지만 미처 생각하지 못했던 것도 있었다.
- 내가 정한 이름이라도 내가 다 암기하고 있을 수 없기 때문에 처음부터 명확하고 의미있는 이름을 짓는 것이 중요하겠다.
- 이름짓기는 프로젝트가 커지면 커질수록 더 중요할 것 같다.