클린코드란
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
'컴퓨터공학 > 기타' 카테고리의 다른 글
CleanCode> Objects, Classes & 전체 요약 (0) | 2022.01.01 |
---|---|
CleanCode> Control Structure (0) | 2021.12.26 |
CleanCode> Comments & Code Formatting , Length & Parameters (0) | 2021.12.25 |
사용자변수? 시스템 변수? 환경변수란 뭘까? (0) | 2021.10.29 |
sourcetree 오류 : Support for password authentication was removed on (0) | 2021.09.16 |