Search
Duplicate

[클린코드] 2장 의미 있는 이름

간단소개
네이밍 - 의미있는 이름짓기
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Java
개발지식
개발방법론
Scrap
태그
Java
클린코드
설계
clean
9 more properties
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
두려워하지 말고 서로의 명명을 지적하고 고치자. 그렇게 하면 이름을 외우는 것에 시간을 빼앗기지 않고 "자연스럽게 읽히는 코드"를 짜는 데에 더 집중할 수 있다.