클린코드 chap 2. 의미있는 이름

최준영·2021년 10월 4일
0

클린한 코드

목록 보기
3/16

chap 2. 의미있는 이름


  • 예제 1 - 나쁜 예 : a와 b가 무슨 의미인지 알기 힘들다.
int a;
String b;
  • 예제 2 - 좋은 예 : 이름만으로 무슨 의미인지 알 수 있다.
int itemCount;
String itemName;
  • 예제 3 - 예제 2에서 더 나아감. 클래스의 사용, 적절한 변수명으로 의미가 분명하다.
class SalesItem {
ItemCode code;
String name;
int count;
}

SalesItem selectedItem = salesIempRepositor.getItemByCode(purchase.Request.getItemCode())
System.out.println("User Requested %s. count = %d",
					selectedItem.getName(), selectedItem.getCount());

루프 속 i j k 사용하지 않기

  • 인덱스가 꼭 필요하지 않다면 lamda나 향상된 for문을 사용한다.
  • for문
for (int i = 0; i < messages.size(); i++) {
  // ..
}
  • 향상된 for문
for (String message : messages) {
  // ..
}
  • lamda
messages.stream().forEach(
  message -> // ...
)
  • i, j, k 대신 맥락에 맞는 이름이 있다.
    • i, h -> row, col / width, height
    • i, j, k -> row, col, depth 등등

통일성 있는 단어 사용하기

  • 비슷한 의미의 단어는 하나로 통일한다.
    • Memeber / Customer / User
    • Service / Manager
    • Repository / Dao

변수명에 타입 넣지 않기

String nameString(X) -> name(O)
Int itemPriceAmount(X) -> itemPrice(O)

Account[] accountArray(X) -> accounts(O)
List<Account> accountList, accounts(둘다 O)
Map<Account> accountMap(O)

public interface IShapFactory(X) -> ShapeFactory(O)
public class ShapeFactoryImpl(soso) -> CircleFactory
  • List와 Map같은 경우에는 변수명에 타입을 붙여줘도 좋다.
  • 구현 클래스 뒤에 Impl을 붙이거나 어떤 구현 클래스인지 명시해도 좋다.
    • 팀원과 통일하고 사용하라

Google Java Naming Code

패키지명

  • All lower case, no underscores
com.example.deepspace // Ok
com.example.deepSpace // no
com.example.deep_space // no

class 명

  • UpperCamelCase(대문자로 시작)
// 클래스는 명사구
Character, ImmutableList

// 인터페이스는 명사, 명사구, 형용사
List, Readable

// 테스크 클래스는 Test로 끝나기
HashTest, hashIntegationTest
  • 형용사로 지은 인터페이스를 구현할 때, ClassImplementReadable와 같이 이름이 자연스럽기 때문에 사용해도 좋다.

Method 명

  • LowerCamelCase(소문자로 시작)
// 메서드는 동사, 동사구
sendMessage, stop

// jUnit 테스트에 Undersore 사용되기도 함.
// <methodUnderTest>_<state> 패턴으로 사용됨
pop_emptyStack
profile
do for me

0개의 댓글