혹시 이런 경험 있으세요? 몇 주 전만 해도 머릿속에 선명했던 코드가, 다시 열어보니 낯설기만 하고 이해도 안 되는 상황. 저도 진짜 많이 겪었어요. 코드를 보면서 "이걸 왜 이렇게 짰지...?" 하고 머리 긁적였던 날들이 수도 없이 많죠.
그럴 때마다 느끼는 건 딱 하나예요. Clean Code, 이게 정말 중요하구나. 작동만 잘하는 코드보다, 누가 봐도 한 번에 이해되는 코드가 진짜 프로의 코드 같아요.
그래서 오늘은 제가 직접 부딪히고 깨달은 Clean Code 핵심 팁 5가지, 아주 솔직하게 공유해볼까 해요. 정답처럼 외우는 게 아니라, "아 나도 이랬는데~" 싶은 그런 이야기들로요.
자, 편하게 읽어주세요. 커피 한 잔 옆에 두고 보면 더 좋고요 ☕
1. if 안의 if 안의 if… 코드도 숨 좀 쉬자!
솔직히 고백하자면, 저도 초반엔 중첩된 조건문이 뭔가 멋있어 보였어요. 똑똑해 보인달까? 근데 다시 보면 그냥… 숨 막혀요. 마치 코드가 미로처럼 느껴지더라고요.
예전 제 코드예요. 지금 보면 쥐구멍이라도…
for number in numbers:
if number > 0:
if number % 2 == 0:
if number <= 100:
results.append(number)
else:
print("너무 큰 수입니다")
else:
print("홀수네요")
else:
print("양수가 아닙니다")
근데 조건 순서를 바꾸고 continue를 쓰니까 이렇게 깔끔해지더라고요:
for number in numbers:
if number <= 0:
print("양수가 아닙니다")
continue
if number % 2 != 0:
print("홀수네요")
continue
if number > 100:
print("너무 큰 수입니다")
continue
results.append(number)
이렇게 바꾸고 나서 코드를 읽을 때 숨이 좀 트인 느낌이랄까요? 꼭 한번 해보세요.
2. 변수 이름, 그냥 아무거나 쓰지 마세요 😅
한창 바쁠 땐 변수명 고민하기 귀찮잖아요. 그래서 i, d, temp 이런 거 쓰게 되는데… 진짜 며칠만 지나면 그게 뭔지 저도 몰라요.
예전 코드예요:
def process_data(d):
for i in d:
if i["tp"] == "CUST":
if i["act"]:
print(i["bal"])
지금 보면… 이게 뭐야 싶죠. 그래서 이렇게 바꿔봤어요:
def filter_active_customers(customers):
for customer in customers:
if customer["type"] == "CUSTOMER":
if customer["is_active"]:
print(customer["balance"])
변수 이름만 바꿨는데 분위기가 달라요. 코드가 말 걸어오는 느낌? 😊
진짜 사소해 보여도, 변수명만 잘 써도 코드가 한결 친절해져요.
3. 함수, 다 해먹지 말자 – 역할 분담 좀 하자구요
한 번은 회사에서 어떤 함수 하나를 열었는데… 진짜 150줄짜리 몬스터였어요. 데이터 처리, DB 저장, Excel 출력까지 전부 다! 보는 순간 한숨부터 나왔어요.
저희도 종종 이렇게 돼요:
def process_orders(orders):
receipts = []
for order in orders:
if not order.fulfilled:
continue
update_inventory(order)
receipt = generate_receipt(order)
receipts.append(receipt)
return receipts
나쁘진 않지만, 좀 숨차죠? 나눠보면 이래요:
def filter_fulfilled_orders(orders):
return [order for order in orders if order.fulfilled]
def process_order(order):
update_inventory(order)
return generate_receipt(order)
def process_orders(orders):
fulfilled_orders = filter_fulfilled_orders(orders)
return [process_order(order) for order in fulfilled_orders]
이렇게 쪼개면 한 눈에 흐름이 보여요. 수정도 편하고, 테스트도 쉬워지고요. 정말 강추!
4. 숫자 그냥 박아넣지 말고 이름 좀 붙이자
어느 날 제 코드에서 ‘10’이 있었는데… 그게 배송비였던가, 수수료였던가? 기억이 안 나는 거예요. 이런 게 바로 Magic Number라 불리는 친구들이에요. 왜 있는지 모를 숫자들.
예시:
def calculate_shipping(weight, destination):
if destination == "US":
if weight > 5:
return 10
elif destination == "CA":
if weight > 4:
return 12
return 5
이걸 이렇게 바꾸면요:
from collections import namedtuple
ShippingRule = namedtuple("ShippingRule", ["max_weight", "fee"])
SHIPPING_RULES = {
"US": ShippingRule(max_weight=5, fee=10),
"CA": ShippingRule(max_weight=4, fee=12),
}
DEFAULT_FEE = 5
def calculate_shipping(weight, destination):
rule = SHIPPING_RULES.get(destination)
if rule and weight > rule.max_weight:
return rule.fee
return DEFAULT_FEE
이제 숫자들 하나하나 다 ‘정체’를 가지고 있잖아요. 보는 사람도 헷갈릴 일이 없죠.
5. 주석? 꼭 필요할 때만! 코드가 말하게 하자
예전에 저도 주석 열심히 달았어요. 근데 웃긴 게, 코드 바꾸고 주석 안 바꾸면 오히려 더 헷갈려요. 나중엔 주석이 문제 되기도 해요.
예전 스타일:
# 세금 계산
price += price * tax_rate
# 할인 적용
price -= price * discount_rate
# 음수 방지
price = max(price, 0)
좀 더 세련되게 바꾸면:
def calculate_price_with_discounts(base_price, tax_rate, discount_rate):
tax_amount = base_price * tax_rate
price_after_tax = base_price + tax_amount
discount_amount = price_after_tax * discount_rate
final_price = price_after_tax - discount_amount
return max(final_price, 0)
변수명이 설명을 다 해주니까 주석이 딱히 필요 없죠? 말 잘하는 코드, 그게 진짜 깔끔한 코드라고 생각해요.
마무리 – 결국, 좋은 코드는 ‘배려’입니다
Clean Code는 단순히 기술적인 게 아니에요. 팀원에 대한 배려, 그리고 미래의 나를 위한 작은 선물이기도 해요.
오늘 이야기한 것들 다시 정리하자면:
- 조건 중첩 줄이기
- 변수 이름에 정성 들이기
- 함수는 역할 하나씩
- Magic Number 없애고 상수 쓰기
- 주석은 꼭 필요할 때만
이 다섯 가지만 지켜도 코드가 확 바뀝니다. 개발 실력은 결국 이런 디테일에서 차이 나는 것 같아요.
공감되셨다면 주변 개발자에게도 꼭 공유해 주세요. 우리 같이 더 편하고 예쁜 코드 써봐요 😊
'SW > 면접' 카테고리의 다른 글
유지보수하기 쉬운 소프트웨어 설계 원칙 3가지 (SRP, OCP, DIP) 완벽 정리 (0) | 2025.04.16 |
---|---|
Fault Tolerance 시스템 쉽게 이해하기: 서비스가 멈추지 않도록 하는 법 (0) | 2025.04.09 |
Kafka란? 쉽게 이해하는 실시간 데이터 처리 시스템 (0) | 2025.04.06 |
가비지 컬렉션이란? 초보 개발자를 위한 쉬운 개념 정리 (0) | 2025.04.03 |
컴퓨터공학 학위를 활용해 실무 기술 쌓는 방법 (0) | 2025.03.22 |