클린 코드: 네이밍, 주석, 포맷팅, 함수

jjin·2024년 3월 20일
0

네이밍

Case

snake_case: Python, Ruby
camelCase: Java, JS
PascalCase: 대부분 언어 클래스
kebab-case: HTML Element

변수, 상수: 명사 or 형용사

user_data
is_valid

함수, 메서드: 동사 or 형용사

send_data()
input_is_valid()

클래스: 명사

주석

왠만하면 좋은 네이밍으로 해결
관용어: TODO, FIXME(치명x 수정필요), XXX(더 생각 필요)

포맷팅

Vertical 포맷팅

파일 나누기
Spacing(줄바꿈으로 코드 가독성)

Horizontal 포맷팅

# 한 줄에 다 넣지 말고 분리
items = [Product(), Product(), Product()]
product_list.extend(items)

# 네이밍 잘해서 줄 길이 줄이기

함수

SRP: 단일 책임

as-is

def create_user(email, password):
    # validation 로직
    if "@" not in email or len(password) < 6 :
        raise Exception("유저 정보를 제대로 입력하세요")

    user = {"email" : email, "password" : password}
    
    database = Database("mysql")
    database.add(user)
    
    email_client = EmailClient()
    email_client.set_config(...)
    email_client.send(email, "회원가입을 축하합니다")

    return True

to-be

def create_user(email, password):
    validate_create_user(email, password)
    user = build_user(email, password)
    
    save_user(user)
	send_welcome_mail(user.email)

	return True

def build_user(email, password)
	return {
    	"email": email, 
        "password": password
    }
    
def validate_create_user(email, password):
	if "@" not in email or len(password) < 6:
    	raise Exception("유저 정보를 제대로 입력하세요")

def save_user(user):
	database = Database("mysql")
    database.add(user)
    
def send_welcome_mail(email):
	email_client = EmailClient()
    email_client.set_config(...)
    email_client.send(email, "회원가입을 축하합니다")

DRY: 반복 금지

한번이라도 반복되면 함수로 빼기

파라미터 수 적게

as-is

def save_user(user_name, email, pw):

to-be

def save_user(user: User):

사이드 이펙트 잘 핸들링

다른 것들을 건드리는 함수(const 함수 외 전부)

  • prefix 네이밍 (update, set같이 직관적으로)
  • CQRS 방식: 명령과 조회 분리
  • update 남발 금지, 순수 함수 형태로 사용
    as-is: 사이드 이펙트 o.
    ex) l1.sort()
carts = []

def add_cart(cart):
	carts.append(cart)
    
cart = Cart(...)
add_cart(cart)

to-be: 사이드 이펙트 x. 순수함수.
ex) return sorted(l1)

carts = []

def get_added_carts(cart):
	return [...carts, cart]

cart = Cart(...)
carts = get_added_carts(cart)
profile
진짜

0개의 댓글

관련 채용 정보