티스토리 뷰

1. 의도를 분명히 밝혀라

변수나 함수 스리고 클래스 이름은 다음과 같은 질문에 모두 답해야 한다.

존재 이유는?

수행 기능은?

사용 방법은?

따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.

int d; // 경과 시간(단위: 날짜) //-- X
int daysSinceCreation;         //-- O

public List<int[]> getThem() { //-- X
	if (cell[STATUS_VALUE] == FLAGGED) //-- X
}

public List<int[]> getFlaggedCells() { //-- O
	if (cell.isFlagged()) //-- O
}

Member member = memberRepository.findById();     //-- X
Member findMember = memberRepository.findById(); //-- O

메소드에서 i, j, k(index)를 사용하지 않을 수 있다.

addvenced for문과 lambda를 사용.

for (int i = 0; i <= messages.size(); i++) {}
for (String message : messages) {}            // advanced for문
messages.stream().foreach(message -> //...)   // lambda

i, j, k --> row, col, depth 의미있는 이름 사용

2. 의미있게 구분하라

연속된 슷자를 덧붙이거나 불용어를 추가하는 방식은 적절하지 못하다.

public static void copyChars(char a1[], char a2[]) { //-- X
}

public static void copyChars(char sourch[], char destication[]) { //-- O
}

읽는 사람이 차이를 알도록 이름을 지어라.

다음과 같이 구분이 되지 않는 이름을 함께 사용하지 말자.

customerInfo / customer
accountData / account
theMassage / message

 

3. 발음하기 쉬운 이름을 사용하라

private Date genymdhms; // generate date, year, month, day, hour, minute, second //-- X
private Date generationTimestamp; //-- O

 

4. 검색하기 쉬운 이름을 사용하라

의미있는 이름은 길이가 길어지지만 변수나 상수를 코드 여러곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다.

const int FIVE = 5;               //-- X
const int WORK_DAYS_PER_WEEK = 5; //-- O

 

5. 인터페이스 클래스와 구현 클래스

인터페이스라는 사실을 이름에 드러내지 말자.

interface     - class
IShapeFactory - ShapeFactory     //-- X
ShapeFactory  - ShapeFactoryImpl //-- O
ShapeFactory  - CircleFactory    //-- O

 

5. 클래스 이름과 메서드 이름

클래스 이름은 명사나 명사구가 적합하다.

Customer, WikiPage, Account, AddressParser 등을 사용하고

Manager, Processor, Data, Info 등의  단어를 피하자.

 

메서드 이름은 동사나 동사구가 적합하다.

PostPayment, deletePage, save 등을 사용하고

get, set, is를 앞에 붙여 사용하자.

 

생성자를 중복정의할 때는 정적 팩토리 메서드를 사용하자.

메서드는 인수를 설명하는 이름을 사용하자.

Complex fulcrumPoint = new Complex(23.0);            //-- X
Complex fulcrumPoint = Complex.FromRealNumber(23.0); //-- O

 

6. 한 개념에 한 단어를 사용하라.

주석을 보지 않고도 올바른 메서드를 선택할 수 있도록 독자적이고 일관성 있는 이름을 사용하자.

똑같은 메서드를 클래스마다 fetch, retrieve, get 으로 제각각 선언하지 말자.

동일 코드 기반의 클래스명을 controller, manager, driver를 섞어 쓰지 말자. (DeviceManager, ProtocolController 등)

 

같은 맥락이 아닌데도 '일관성'을 고려해 같은 이름을 사용하지 말자.

값을 더하는 기능 : add

집합에 값을 추가하는 기능 : add -> insert, append 사용

 

7. 해법 영역에서 가져온 이름을 사용하라

전산용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다. (JobQueue 등)

 

8. 의미 있는 맥락을 추가하라

firstname, lastName, street, state 등 주소를 나타내는 변수 중

state 하나만을 메서드에서 사용한다면 주소의 일부라는 사실을 알지 못할 수 있다.

addr 접두어(addrFirstName, addrLastName, addrState 등)를 추가하거나

Address 클래스를 생성하도록 한다.

 

9. Google Java Naming Guide

출처 : Google Java Naming Guide

 

1) pacakge

소문자만 사용, _(underscores) 사용 X

com.example.deepspace  //-- O
com.example.deepSpace  //-- X
com.example.deep_space //-- X

2) class

UpperCamelCase(대문자로시작)

// 클래스는 명사, 명사구
Character, ImmutableList

// 인터페이스는 명사, 명사구, (형용사)
List, Readable

// 테스트 클래스는 Test로 끝나기
HashTest, HashIntegrationTest

 

3) method

LowerCamelCase(소문자로시작)

// 메서드는 동사, 동사구
sendMessage, stop

// jUnit 테스트에 underscore 사용되기도 함
// <methodUnderTest>_<state> 패턴
pop_emptyStack

 

 

 

 

출처

Clean Code(클린 코드) 애자일 소프트웨어 장인 정신

로버트 C. 마틴 지음

 

728x90

'책 내용 정리 > 클린코드(clean code)' 카테고리의 다른 글

[클린코드] 5. 형식 맞추기  (0) 2022.03.03
[클린코드] 4. 주석  (0) 2022.01.17
[클린코드] 9. 단위 테스트  (0) 2021.12.14
[클린코드] 3. 함수  (0) 2021.12.01
[클린코드] 1. 깨끗한 코드  (0) 2021.11.25