![클린 코드 : 의미 있는 이름](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFYi48%2FbtsIiaFqDDe%2FcBl2PwpKC74uLeH9rKL4FK%2Fimg.png)
의미 있는 이름
의도를 분명히 밝혀라
- 존재 이유, 수행 기능 , 사용 방법 등 따로 주석을 달려고 하지말고 이름에 의도를 명확하게 표현할 수 있도록하자
// Bad
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList) {
if (x[0] == 4) {
list1.add(x);
}
}
return list1;
}
- 해당 코드는 지뢰찾기 게임 코드였다. 다만 이렇게 있어선 알기가 쉽지 않다
// Good
public List<int[]> getFlaggedCells() {
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard) {
if (cell[STATUS_VALUE] == FLAGGED) {
flaggedCells.add(cell);
}
}
return flaggedCells;
}
- 게임판이라는 사실을 gameBoard라는 걸 통해 알 수 있고 각 판에 상태를 통해 깃발이 꽂힐 칸을 넣어주는 역할임을 이름을 명확하게 함으로써 가독성이 좋아졌다
그릇된 정보를 피하라
- 특정 도메인 약어를 사용하여 다른 사람들을 헷갈리게 하지마라
의미 있게 구분하라
- 이름을 지을 때 막 줄이는 것 보단 발음하기 편하게 짓는게 더 낫다
- gt 보다 generationTimestamp가 발음하기도 쉽게 다른 사람에게 이해시키기도 쉽다
클래스 이름
- 명사나 명사구 / 동사는 x
- Ex) Customer, WikiPage, Account, AddressParser 등등
메서드 이름
- 동사나 동사구
- ex) postPayment, deletePage, save 등
- get,set,is 를 접두사처럼 붙이는 것도 ㄱㅊ
말장난을 하지마라
- 기존에 사용했던 add의 개념이 기존값 더하는 거 였는데 새로 작성한 add가 집합에 값을 추가하는 경우 이는 기존의 코드와 다른 내용이기 때문에 add라는 메서드명을 사용하기 보다는 insert나 append를 사용하는 것이 타당하다
의미 있는 맥락을 추가하라
// Bad
private void printGuessStatistics(char candidate, int count) {
String number;
String verb;
String pluralModifier;
if (count == 0) {
number = "no";
verb = "are";
pluralModifier = "s";
} else if (count == 1) {
number = "1";
verb = "is";
pluralModifier = "";
} else {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
String guessMessage = String.format("There %s %s %s%s", verb, number, candidate, pluralModifier );
print(guessMessage);
}
- 함수를 끝까지 읽어야 변수가 어떻게 사용되는지 알 수 있음
- 메서드만 읽어서는 의미가 불분명하다
// Good
public class GuessStatisticsMessage {
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate, int count) {
createPluralDependentMessageParts(count);
return String.format("There %s %s %s%s", verb, number, candidate, pluralModifier );
}
private void createPluralDependentMessageParts(int count) {
if (count == 0) {
thereAreNoLetters();
} else if (count == 1) {
thereIsOneLetter();
} else {
thereAreManyLetters(count);
}
}
private void thereAreManyLetters(int count) {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
private void thereIsOneLetter() {
number = "1";
verb = "is";
pluralModifier = "";
}
private void thereAreNoLetters() {
number = "no";
verb = "are";
pluralModifier = "s";
}
}
- 세 변수의 맹략을 분명하게 쪼개서 맥락을 분명히함
참고
https://product.kyobobook.co.kr/detail/S000001032980
Clean Code(클린 코드) | 로버트 C. 마틴 - 교보문고
Clean Code(클린 코드) | 프로그래머, 소프트웨어 공학도, 프로젝트 관리자, 팀 리더, 시스템 분석가에게 도움이 될 더 나은 코드를 만드는 책『Clean Code(클린 코드)』은 오브젝트 멘토(Object Mentor)의
product.kyobobook.co.kr
'도서' 카테고리의 다른 글
클린코드 : 객체와 자료 구조 (0) | 2024.07.07 |
---|---|
클린코드 : 형식 맞추기 (0) | 2024.07.07 |
클린 코드 : 주석 (0) | 2024.07.07 |
클린 코드 : 함수 (0) | 2024.06.29 |
클린 코드 : 깨끗한 코드 (0) | 2024.06.29 |
하고 싶은 걸 하고 되고 싶은 사람이 되자!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!