본문 바로가기

컴퓨터공학/기타

CleanCode> intro & Variables, Functions, Classes 작명법

클린코드란

1. 읽기 쉽고 의미가 있어야 함

2. 인지하는 시간을 줄여야 함

3. 간결하고 핵심이 있어야 함

4. 직관적이지 않은 코드와 복잡한 중첩 코드를 피해야 함

5. 공통으로 쓰이는 예시와 패턴을 따라야 함

6. 쓰고 유지할 수 있게 재밌어야 함

 

차례

1. 이름

Variables, Functions, Classes 

2. 형식과 주석

: Code formatting, Good & Bad comments

3. 함수

: Length, Parameters

4. 조건문 & 에러처리

: Deep nesting, Missing error handling

5. 클래스와 데이터 구조

: Missing distinction, Bloated classes

 

 


1. 이름

1) Variables, constants & properties

Data container로 쓰인다.

예를 들면 유저 입력값이나 검증값이나 리스트 값 등등

이름을 명사로 쓰거나 형용사가 붙은 구로 한다. 

ex - userData, isValid 

 

Value가 객체이면 객체를 묘사 

ex - user, database, 

Value가 number나 string이면 값을 묘사.

ex - name, age

Value가 Boolean이면 true/false 질문에 대답하게 작성한다.

ex - isActive, loggedIn

 

다음과 같이 좀 더 자세하게 작명할 수 있지만 상황에 맞게 취사선택할 것

user, database  >> authenticatedUser, sqlDatabase

name, age >> firstName, age

isActive, loggedIn >> isActiveUser, loggedIn

 

example 1

name, email, age 데이터가 있으면

나쁨 : u, data (u와 data는 너무 포괄적이다.) 

보통 : userData, person (userData는 너무 자세하고, person은 구체적이지 않다.)

좋음 : user, customer (user는 설명이 충분히 되고 customer는 좀 더 구체적이다.)

 

example 2

유저 입력값 검증 결과 true, false가 있으면

나쁨 : v, val (너무 포괄적) 

보통 : correct, validatedInput ( true나 false값 말고 다른 데이터 타입으로 혼동할 수 있다.)

좋음 : isCorrect, isValid ( true나 false 값이란 걸 바로 알 수 있다.)

 

 

2) Functions / methods

명령어나 계산값

서버에 데이터를 보내거나 유저 입력값이 맞는 지 확인할 때

동사를 사용하거나 형용사가 붙은 구 사용

ex - sendData( ), inputIsValid( )

 

어떤 작동을 수행하는 함수는 작동을 묘사하는 이름

ex - getUser( ... )

response.send( ... )

물론 더 자세하게 쓸 수 있다.

getUserByEmail( ... )

response.send( ... )

 

boolean 값을 처리하는 함수는 true/false 질문에 답하는 이름

isValid( ... )

purchase.isPaid( ... )

물론 더 자세하게 쓸 수 있다.

emailIsValid( ... )

purchase.isPaid( ... )

 

example 1

db에 유저 데이터를 저장

나쁨 : process( ... ), handle( ... ) - 뭘 하는 지 알 수 없다. 

보통 : save( ... ), storeData( ... ) - 저장하는 건 알지만 뭘 저장하는 지 알 수 없다.

좋음 : saveuser( ... ), user.store( ... ) - 명확하다

 

 example 2 

유저 입력값을 검증

나쁨 : process( ... ), save( ... ) 

보통 : validateSave( ... ), check( ... )

좋음 : validate( ... ), isValid( ... )

 

 

 

 

 

3) Classes

객체를 만들기 위해 클래스를 사용한다.

유저, 상품, http request body

명사를 사용하거나 명사를 사용한 구 사용

class User { ... }

class RequestBody { ... }

 

객체를 설명할 수 있는 이름을 사용한다. 

User, Product로 할 수 있고 

자세하게 Customer나 Course를 사용할 수 있다.

클래스 이름은 과한 접미사를 사용하지 말자.

 

A User가 있으면

나쁨 : class UEntity, class ObjA - 너무 추상적이다.

보통 : class UserObj, class AppUser - 클래스 이름치고는 너무 자세함

좋음 : class User, class Admin - admin은 user에서 좀 더 자세하게 쓴 것 

 

A Database가 있으면

나쁨 : class Data, class DataStorage - 명확하지 않고 database란 걸 알 수 없음

보통 : class db, class Data - 구체적이지 않음

좋음 : class Database, class SQLDatabase

 

 


 

작성법 종류

1) snake_case

ex - is_valid, send_response

Python

Variables, functions, methods

 

2) camelCase

ex - isValid, sendResponse

Java, JavaScript

Variables, functions, methods

 

3) PascalCase

ex - AdminRole, UserRepository

Python, Java, JavaScript

Classes

 

4) kebab-case

<side-drawer>

HTML

Custom HTML Elements

 

 


주의점

1. 이름에 너무 과하게 정보를 넣지 말 것

2. 은어 쓰지 말 것

3. 축약어 쓰지 말 것 

4. 이름이랑 내용 다르게 쓰지 말 것 

5. 비슷한 이름말고 구분되는 이름으로 지을 것 

: 예를 들면 getDailyData/ getDayData/ getRawDailyData/ getParsedDailyData  이거 대신

getDailyReport/ getDataForToday/ getRawDailyData/ getParsedDailyData 이게 더 나음

6. 왜냐하면 말할 때 비슷한 발음이면 의미 전달이 혼동

7. 일관성 유지

동의어 쓰지 말 것

: getUsers/ fetchUsers/ retrieveUsers