1. 의미 있는 이름 짓기
1.1 의미가 분명한 이름 짓기
다음 코드를 살펴보면 변수명이 모호합니다.
1int a;2String b;34// ..56System.out.printf("User Requested %s. count = %d", b, a);78// Console Output9// User Requested book. count = 3
그래서 다음과 같은 식으로 변수명을 변경해야 합니다.
1int itemCount;2String itemName;34// ..56System.out.printf("User Requested %s. count = %d", itemName, itemCount);78// Console Output9// User Requested book. count = 3
그리고 클래스로 지어줄 수도 있습니다.
1class SalesItem {2ItemCode code;3String name;4int count;5}67// ..89SalesItem selectedItem = salesItemRepository.getItemByCodeCode(purchaseRequest.getItemCode())1011System.out.printf("User Requested %s. count = %d",12selectedItem.getName(), selectedItem.getCount());1314// Console Output15// User Requested book. count = 3
1.2 루프 속 i, j, k 사용하지 않기
1.2.1 i를 사용하지 않을 수 있다.
배열을 순회할 댸 index를 의미하는 i를 사용하지 않고 advaced for문으로 대체할 수 있다.
1// 예전 방식2for (int i = 0; i < message.size(); i++) {3// ..4}56// advaced for으로 대체7for (String message : messages) {8// ..9}1011// java8부터 lamda를 사용할 수도 있다.12messages.stream().forEach{13message -> // ..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// 일반변수명2String nameString (❌) -> name3Int itemPriceAmount (❌) -> itemPrice45// Map과 List6Account[] accountArray (❌)-> accounts7List<Account> accountList (⭕) -> accounts, accountList8Map<Account> accountMap (⭕)910// 인터페이스와 클래스11public interface IShapeFactory (❌) -> ShapeFactory12public 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
1com.example.deepspace (⭕)2com.example.deepSpace (❌)3com.example.deep_space (❌)
2.2 Class Naming Guide
UpperCamelCase(대문자로 시작)
1// 클래스는 명사, 명사구2Character, ImmutableList34// 인터페이스는 명사, 명사구, (형용사)5List, Readable67// 테스트 클래스는 Test로 끝나기8HashTest, HashIntegrationTest
2.3 Method Naming Guide
LowerCamelCase(소문자로 시작)
1// 메서드는 동사, 동사구2sendMessage, stop34// jUnit 테스트에 underscore 사용되기도 함5// <methodUnderTest>_<state> 패턴6pop_emptyStack