Chapter 01. 나쁜 코드란 무엇일까
성능이 나쁜 코드
불필요한 연산이 들어가서 개선의 여지가 있는 코드
의미가 모호한 코드
이해하기 어려운 코드
네이밍과 그 내용이 다른 코드
중복된 코드
비슷한 내용인데 중복되는 코드
나쁜 코드를 방치하면 안되는 이유
1. 깨진 유리창 법칙 *깨진 유리창 하나를 방치해두면 그 지점을 중심으로 범죄가 확산한다는 법칙
나쁜 코드는 깨진 유리창처럼 계속 나쁜 코드가 만들어지도록 한다.
2. 생산성 저하
나쁜 코드는 팀 생산성을 저하시킨다. 기술 부채를 만들어 수정을 더 어렵게한다.
3. 새로운 시스템을 만들어야한다.
현 시스템을 유지보수하며 대처할 새로운 시스템 개발은 현실적으로 매우 어렵다.
나쁜 코드를 짜는 이유
- 촉박한 일정
- 생각보다 영향범위가 넓어서 일이 커질까봐
So, What is CLEAN CODE
- 한 가지를 제대로 하는 코드 Single Responsibility Principle
- 의미가 명확한 코드
- 성능이 좋은 코드
- 중복이 제거된 코드
Chapter 02. 의미가 분명한 이름짓기
- 더 좋은 코드가 뭘까 고민해보자.
int a;
int b;
System.out.println("User's Seed Money %d. Today's Save Money =%d", a, b );
int seedMoney;
int saveMoney;
System.out.println("User's Seed Money %d. Today's Save Money =%d", seedMoney, saveMoney );
- 명확하게 코드를 파악할 수 있도록 클래스 이용하기
class ResearchItem {
ResearchCode code;
String title;
int researcherCount;
}
ResearchItem selectedResearch = researchItemRepository.getResearchByCode(conferenceRequet.getResearchCode());
- 인덱스가 필요 없다면 roop 속 i j k 사용하지않기
for( int i = 0; i<research.size(); i++) {
// ..
}
instead of Advanced for
for(int research : todayResearch) {
// ..
}
instead of lamda
todayResearch.stream().forEach(
research -> // ..
)
** i j k 대신, 맥락에 맞는 이름을 찾아 사용하자
ex ) row, col / width, height ..
- 통일성 있는 단어 사용하기
Member / Customer / User
Service / Manager
Repository / Dao
- 변수명에 타입 넣지 않기
String nameString 보다는 name
int itemPriceAmonut 보다는 itemPrice
Account[] accountArray 보다는 accounts
List<Account> accountList 또는 accounts
Map<Account> accountMap : 네이밍만 보고 타입을 유추할 수 있다
public interface IShapeFactory 보다는 ShapeFactory
public class ShapeFactoryImpl 또는 CircleFactory : 인터페이스 앞에 I를 붙이지않고 구현클래스에 Impl을 붙이는 방식인데, 이것은 팀과 회사가 정해놓은 규칙을 따라가면 된다.
- 패키지 네이밍 가이드 , All lower case, no underscores
com.example.deepspace (o)
com.example.deep_space (x)
com.example.deepSpace (x)
- 클래스 네이밍 가이드 , UpperCamelCase (대문자로 시작)
클래스는 명사, 명사구
Character, ImmutableList
인터페이스는 명사, 명사구, (형용사)
List, Readable
테스트 클래스는 Test로 끝나기
HashTest, HashIntegrationTest
- 메소드 네이밍 가이드 , LowerCamelCase (소문자로 시작)
메소드는 동사, 동사구
sendMessage, stop
jUnit 테스트에 underscore 사용되기도 함
** methodUnderTest_state 패턴
pop_emptyStack
본 포스팅은 로버트 C마틴의 <클린코드 : 애자일 소프트웨어 장인정신> 을 기반으로 한다.
'책 > 클린코드' 카테고리의 다른 글
[클린코드 완독하기] Chapter 07 오류 처리 (0) | 2021.09.26 |
---|---|
[클린코드 완독하기] Chapter 06 객체와 자료구조 (0) | 2021.09.23 |
[클린코드 완독하기] Chapter 05 형식 맞추기 (0) | 2021.09.20 |
[클린코드 완독하기] Chapter 04 주석 (0) | 2021.09.18 |
[클린코드 완독하기] Chapter 03 함수 (0) | 2021.09.17 |