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 (int i = 0; i < messages.size(); i++) {
}
for (String message : messages) {
}
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
com.example.deepSpace
com.example.deep_space
class 명
// 클래스는 명사구
Character, ImmutableList
// 인터페이스는 명사, 명사구, 형용사
List, Readable
// 테스크 클래스는 Test로 끝나기
HashTest, hashIntegationTest
- 형용사로 지은 인터페이스를 구현할 때,
ClassImplementReadable
와 같이 이름이 자연스럽기 때문에 사용해도 좋다.
Method 명
sendMessage, stop
pop_emptyStack