🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
CS
클린코드
2장 의미있는 이름

1. 의미 있는 이름 짓기

1.1 의미가 분명한 이름 짓기

다음 코드를 살펴보면 변수명이 모호합니다.

1
int a;
2
String b;
3
4
// ..
5
6
System.out.printf("User Requested %s. count = %d", b, a);
7
8
// Console Output
9
// User Requested book. count = 3

그래서 다음과 같은 식으로 변수명을 변경해야 합니다.

1
int itemCount;
2
String itemName;
3
4
// ..
5
6
System.out.printf("User Requested %s. count = %d", itemName, itemCount);
7
8
// Console Output
9
// User Requested book. count = 3

그리고 클래스로 지어줄 수도 있습니다.

1
class SalesItem {
2
ItemCode code;
3
String name;
4
int count;
5
}
6
7
// ..
8
9
SalesItem selectedItem = salesItemRepository.getItemByCodeCode(purchaseRequest.getItemCode())
10
11
System.out.printf("User Requested %s. count = %d",
12
selectedItem.getName(), selectedItem.getCount());
13
14
// Console Output
15
// User Requested book. count = 3

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

1.2.1 i를 사용하지 않을 수 있다.

배열을 순회할 댸 index를 의미하는 i를 사용하지 않고 advaced for문으로 대체할 수 있다.

1
// 예전 방식
2
for (int i = 0; i < message.size(); i++) {
3
// ..
4
}
5
6
// advaced for으로 대체
7
for (String message : messages) {
8
// ..
9
}
10
11
// java8부터 lamda를 사용할 수도 있다.
12
messages.stream().forEach{
13
message -> // ..
14
}

1.2.2 최대한 의미를 찾을 수 있다.

i, j, k 대신 맥락에 맞는 이름이 있다.

  • i, j -> row, col / width, height
  • i, j, k -> row, col, depth

1.3 통일성 있는 단어 사용하기

  • Member / Customer / User
  • Service / Manager
  • Repository / Dao

1.4 변수명에 타입 넣지 않기

1
// 일반변수명
2
String nameString (❌) -> name
3
Int itemPriceAmount (❌) -> itemPrice
4
5
// Map과 List
6
Account[] accountArray (❌)-> accounts
7
List<Account> accountList (⭕) -> accounts, accountList
8
Map<Account> accountMap (⭕)
9
10
// 인터페이스와 클래스
11
public interface IShapeFactory (❌) -> ShapeFactory
12
public class ShapeFactoryImpl(🔺) -> CircleFactory

2. Google Java Naming Guide

https://google.github.io/styleguide/javaguide.html#s5-naming

2.1 Package Naming Guide

All lower case, no underscores

1
com.example.deepspace (⭕)
2
com.example.deepSpace (❌)
3
com.example.deep_space (❌)

2.2 Class Naming Guide

UpperCamelCase(대문자로 시작)

1
// 클래스는 명사, 명사구
2
Character, ImmutableList
3
4
// 인터페이스는 명사, 명사구, (형용사)
5
List, Readable
6
7
// 테스트 클래스는 Test로 끝나기
8
HashTest, HashIntegrationTest

2.3 Method Naming Guide

LowerCamelCase(소문자로 시작)

1
// 메서드는 동사, 동사구
2
sendMessage, stop
3
4
// jUnit 테스트에 underscore 사용되기도 함
5
// <methodUnderTest>_<state> 패턴
6
pop_emptyStack