알고리즘 문제 푸는 과정에서 변수를 생성할 때 이름을 어떻게 해야 이해가 잘 되고 문제의 집중력이 유지될 수 있는지,
또한, 어플리케이션 개발에 있어 변수 이름, 메서드 이름을 어떻게 해야 이해가 잘 되고 가독성이 좋은지 알고 싶었습니다.
목차
1. 왜 필요할까
2. 기본적인 네이밍 컨벤션
3. 알고리즘 문제 풀이 변수 명명 규칙
4. 변수 명명 규칙
5. 메서드 명명 규칙
👉 코드의 유지보수를 위해
👉 협업자에 대한 배려
👉🏾 분명한 의도 전달
👉 JE22 권장 변수 명명 규칙
카멜 표기법을 사용합니다.
String userName
문제를 보다보면 주로 나오는 키워드들이 존재합니다.
해당 키워드를 기준으로 이름을 정했습니다.
| 키워드 | 변수명 | 설명 |
|---|---|---|
| 숫자 | number, n | 순수한 숫자를 가리키는 경우 |
| 횟수 | count | 몇번 세었는지 횟수를 나타내는 경우 |
| 인덱스 | idx | 현재 인덱스의 위치를 나타내는 경우, 기준 인덱스를 둘 경우 |
| 위치 | pt, pos | 현재 위치를 나타내는 경우 |
| 2개의 위치 | lt, rt | two pointer를 나타내는 경우 |
| 값 | e, n | 현재 위치의 값을 나타내는 경우 |
| 키, 값 | k, v | Map 등의 key,value 자료구조 사용 |
b 보다 board로 게시물이라는 의미를 부여하는 것이 보기 좋습니다.
for(int i = 0; i < boardArr.length; i += 2)
int EvenIndex = 2;
for(int i = 0; i < boardArr.length; i += evenIndex)
의도가 불분명한 짧은 이름은 어떤 역할의 변수인지 파악하기 힘듭니다.
done, error, found, ok, success 같은 전형적인 boolean 변수같은 이름을 사용합니다.
행위를 정확히 설명하는 구체적인 이름이 있다면 processingComplete으로 대체하면 보기 좋습니다.
status -> statusOK
sourceFile -> sourceFileFound
와 같이, 참이나 거짓의 의미를 명백히 밝힙니다.
notFound == false -> found == true
와 같이, 긍정적인 변수 이름이 읽기 쉽습니다.
이를 isFound로 접두어 is를 사용하여 조건절을 표현하면 좋습니다. (is를 빼는 것이 더 좋을 때도 있습니다.)
private List<Integer> numberList = new ArrayList<>();
private List<Integer> numbers = new ArrayList<>();
List를 다른 컬렉션으로 바꿔야 할 때 변수명까지 바꾸지 않아도 됩니다.
기본적으로 동사로 시작합니다.
public void getUserByName()
public void setContent(String content)
다른 타입으로의 전환 및 빌더 패턴을 구현한 클래스의 메서드는 전치사를 사용합니다.
public String toString()
public BoardResponseDto toDtofromBoard(~~)
public User of()
필드이름_설정값으로 등록하라// state를 vip로 설정하라
public void registerStateToVip()
메서드명_테스트상태_기대행위 순으로 작성하라MethodName_StateUnderTest_ExpecteBehavior
@Test
void isPopular_LikeLessThan100_True(){}
👉 get/set
자바빈 규약의 엑세스 함수들은 객체지향적인 코드를 작성할 수 없기에 최대한 지양합니다.
[Clean code] getter setter에 대한 고찰
👉 init
데이터 초기화할 때 사용됩니다.
public void initData()
👉 is/has/can
boolean값을 리턴하는 메서드를 작성할 때 사용합니다.
is : 맞는지 틀린지
has : 데이터를 가지고 있는지
can : 할 수 있는지
public boolean isNumber()
public boolean hasData()
public boolean canWrite()
👉 create
팩토리 메서드 패턴을 구현할 때 많이 사용됩니다.
public Board create()
👉 find
데이터 찾을 때 사용됩니다.
주로 JPA에서 사용됩니다.
public Element findElement(int number)
👉 to
객체를 다른 형태의 객체로 변환할 때 사용됩니다.
public String toString()
👉 register
set은 자바빈 규약에 의해 복잡한 연산을 수행할 수 없습니다. 이를 위해 좀 더 지능적인 set이 요구될 때 해당 접두어를 사용합니다.
public String registerTitle()
👉 A-By-B
B를 기준으로 A행동을 하겠다 할 때 사용됩니다.
// id(B)를 기준으로 getUser(A) 하겠다
public void getUserById(Long id)