1장 에서는 좋은 코드와 나쁜코드가 어떤것인지 이론적으로 알아보았습니다.
2장에서는 좋은 코드를 만들기 위한 첫 시작
네이밍부터 살펴보도록 하겠습니다.
예시코드들은 JAVA 기준으로 작성되었습니다.
목차
네이밍
1. 의미가 분명한 이름짓기
•
변수의 존재 이유, 기능, 사용법 등이 이름에 드러나야한다.
•
주석이 필요없을 정도로 명확해야한다.
안좋은 예
int a;
String b;
//in C
// printf("Item Requested %s, Count = %d \n", b, a);
System.out.println("Item Requested %s, Count = %d", b, a);
Java
복사
좋은 예
int itemCount;
// c : char *itemName;
String itemName;
//in C
//printf("Item Requested %s, Count = %d \n", itemName, itemCount);
System.out.println("Item Requested %s, Count = %d \n", itemName, itemCount);
Java
복사
변수명에 구체적인 내용을 써주어야 가독성이 좋고 코드를 읽었을때 무엇인지 명확하게 알 수 있다.
2. 루프 속에서 i j k 사용하지 않기
Advanced for문 혹은 Lamda로 대체
*JAVA 및 Advanced for문을 사용하는 언어일 경우 해당한다.
일반적인 for문
for (int i = 0; i < word.length(); i++){
...
}
Java
복사
Advanced for 문 사용 예시
for (String str : word){
...
}
Java
복사
⇒ Index를 직접 사용할 일이 없다면 i 를 선언해서 사용하기보다,
advanced for문으로 사용을 대체하는 것이 가독성이 좋다.
JAVA의 경우 다음과 같이 lamda를 사용해서 처리하기도 한다.
word.stream().forEach(
str -> ...
}
Java
복사
⇒ 현업에서는 직접 i 를 사용하는경우가 많지 않다고 한다.
직접 값으로 접근하게되는 경우는 많지만 i 로 익덱스 값을 찾아서 조작하는 방식의 코드는 잘 작성하지 않는다고 한다.
for문을 사용할 일이 있다면 가급적 Advance for 문 혹은 lamda 방식을 이용하도록 하자
의미를 부여하기
i, j, k 를 사용한 곳에는 가능한 맥락에 맞는 이름을 사용한다.
좌표의 경우 x, y, z 혹은 너비 높이, 가로 세로 등등..
i,j,k -> row, col, depth
i, j -> width, height
Java
복사
3. 한개념에 한 단어를 사용하라 (통일성)
같은 의미의 이름을 다양한 표현으로 사용하지 않고 통일성 있게 사용해야한다.
팀끼리 미리 컨벤션을 맞추고 들어가야 한다.
통일성 / 일관성 있게 코드를 사용하도록 하자.
fetch == retrive == get
Member == User == Customer
Service == Manager
Repository == Dao
controller == manager == driver
Java
복사
4. 타입이 들어간 변수명 사용하지 않기
변수명에 불필요한 타입명을 기재하지 않도록 한다.
int itemPriceAmount -> itemPrice
String nameString -> name
Member[] memberArray -> members
Java
복사
예외 Map, List
List 와 Map 같은경우 네이밍으로 타입을 유추할 수 있도록 하는경우는 많이 있다.
특히 Map 같은경우 대체할 말이 딱히 없기때문에, 변수명에 map을 많이 사용한다.
List<Member> memberList, members
Map<Member> memberMap
Java
복사
예전 코드에서는 인터페이스의 경우 앞에 I를 사용해주었지만 최근에는 사용하지 않는 추세이다.
구현체의 경우 Impl 를 사용하고 현재 많이 사용하고 있지만 명확히 하기위해
구현체의 이름을 구체적으로 명시해주는것이 더 좋다.
public interface IShapeFactory -> shapeFactory
public class ShapeFactoryImpl -> RectagleFactory
Java
복사
Google Java Naming Guide
책에서 제시하는 내용은 JAVA 이기때문에 JAVA 기준으로 작성하였다.
다음은 구글에서 제시하는 네이밍 가이드이다. ( JAVA )
C++ 버전도 있습니다.
Package Naming
•
소문자만 사용
•
_ (언더바) 사용 X
//안좋은 예시
com.example.deepSpace
com.example.deep_space
//옳바른 예시
com.example.deepspace
Java
복사
Class Naming
•
대문자로 시작 UpperCamelCase
•
클래스는 명사, 명사구를 사용하라
◦
ImmutableList, Character, Customer, Account, AddressParser
•
인터페이스는 명사, 명사구 (형용사)를 사용
◦
List, Readable
•
테스트 클래스는 Test로 끝내기
◦
MapTest, MapIntegrationTest
Method Naming
•
소문자로 시작 LowerCamelCase
•
메서드는 동사, 동사구로 시작하라.
◦
sendMessage, postPayment, deletePayment
•
접근자, 변경자, 조건자는 get, set, is로 시작하라.
•
JUnit 테스트에는 “_”를 사용하기도 한다
◦
<methodUnderTest>_<state>패턴
▪
dequeue_emptyQueue
두려워하지 말고 서로의 명명을 지적하고 고치자. 그렇게 하면 이름을 외우는 것에 시간을 빼앗기지 않고 "자연스럽게 읽히는 코드"를 짜는 데에 더 집중할 수 있다.