Sky Archive

교육/Clean Code

[Clean Code] 클린 코드 'Chapter 1, 2 깨끗한 코드' 핵심 내용 및 정리

Anchovy ʕ-᷅ᴥ-᷄ʔ 2022. 12. 19. 14:26

 

안녕하세요.🐱‍🐉

소프트웨어 개발자라면 한 번씩 들어보고 필독서로 자주 언급되는 '클린 코드'

몇 년 전 지인에게 선물 받아 조금 읽다 방치되었는데!

이번에 다시 제로베이스를 통해 공부하며 정리한 내용을 포스팅하려고 합니다!

 

'클린 코드'

애자일 소프트웨어의 혁명적인 패러다임을 제시하는 책이다. 저자 로버트 마틴은 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제하여『Clean Code』에 담았다. 아주 많은 코드를 읽고 그 코드의 무엇이 옳은지, 그른지 생각하며 전문가로서 자신이 지니는 가치를 돌아보기 위해 꾸준히 노력한다면, 이 책을 통해 여러분의 프로그래밍 실력은 한층 더 높아질 것이다.

도서 목차

Chapter 1. 깨끗한 코드
Chapter 2. 의미 있는 이름

(p1-p38)

 

Chapter 3. 함수

Chapter 4. 주석

Chapter 5. 형식 맞추기

Chapter 6. 객체와 자료 구조

Chapter 7. 오류 처리

Chapter 8. 경계

Chapter 9. 단위 테스트

Chapter 10. 클래스

Chapter 11. 시스템

Chapter 12. 창발성

Chapter 13. 동시성

Chapter 14. 점진적인 개선

Chapter 15. JUnit 들여다보기

Chapter 16. SerialDate 리팩터링

Chapter 17. 냄새와 휴리스틱

 

강의 목차

클린 코드와 그 첫걸음 네이밍

01 나쁜 코드
02 클린 코드
03 의미 있는 이름 짓기
04 Google Java Naming Guide

 

01 나쁜 코드

what? 나쁜 코드란?

- 성능이 나쁜 코드
불필요한 연산이 들어가서 개선의 여지가 있는 코드

- 의미가 모호한 코드
이해하기 어려운 코드 네이밍과 그 내용이 다른 코드

- 중복된 코드
비슷한 내용인데 중복되는 코드들은 버그를 생성

 

why? 왜 나쁜 코드인가?

반복적으로 나쁜 코드를 생산
생산성 저하
유지보수가 힘들어 결국 새로운 시스템이 필요

 

when? 왜 나쁜 코드를 짜는가?

촉박한 일정
Side Effect

 

02 클린 코드

성능이 좋은 코드

의미가 명확한 코드 (= 가독성이 좋은 코드)

중복이 제거된 코드

보이스카웃 룰 - 전보다 더 깨끗한 코드로 만든다

 

03 의미 있는 이름 짓기

- 의미가 분명한 이름 짓기

int a, String b 대신 int itemCount, String itemName

 

- 루프 속 i, j, k 사용하지 않기

for문 대신, advanced for문, lamda를 사용

i, j, k 대신 맥락에 맞는 이름 사용

 

- 통일성 있는 단어 사용

Member / Customer / User

 

- 변수명에 타입 넣지 않기

String nameString (bad) -> name
Int itemPriceAmount (bad) -> itemPrice
Account[] accountArray (bad) -> accounts

// map은 표현을 대체할 수 없어 넣는다.
List<Account> accountList (good) -> accounts, accountList
Map<Account> accountMap (good)

// interface를 뜻하는 i는 넣지 않는 추세
public interface IShapeFactory (bad) -> ShapeFactory

// implement의 impl은 많이 사용되고 있지만 명확한 이름을 사용하기도 함. 팀 규정에 따름.
public class ShapeFactoryImpl (good) -> CircleFactory

 

04 Google Java Naming Guide

구글 자바 네이밍 가이드

 

- Package Naming Guide

All lowercase, no underscores

com.example.deepspace

 

- Class Naming Guide

UpperCamelCase (대문자로 시작)

// 클래스는 명사, 명사구
Character, ImmutableList

// 인터페이스는 명사, 명사구, (형용사)
List, Readable

// 테스트 클래스는 Test로 끝나기
HashTest, HashIntegrationTest

 

- Method Naming Guide

LowerCamelCase (소문자로 시작)

// 메서드는 동사, 동사구
sendMessage, stop

// jUnit 테스트에 underscore 사용되기도 함
// <methodUnderTest>_<state> 패턴
pop_emptyStack