티스토리 뷰
Overview
클린코드 책을 읽고, 짧은 후기를 써보려한다.
목표
클린코드에 대해 쉽게 생각하기
실무에서 클린코드 잘 적용하기
이름을 잘짓자
의도를 분명히 밝혀라
나쁜예
int a;
int b;
좋은예
long batchStartTime;
long batchEndTime;
long elapsedTimeInDays;
길어도 좋으니 형용사 + 명사를 조합하여 변수명에 작성자의 의도를 명확히 드러내자.
단 루프(for문..)에서는 전통적으로 한글자 변수를 사용함( i, j, k , 단! l, o 는 안됨! 숫자랑 헷갈림 ㅎ )
애매한 단어나 프로그램 단어는 되도록이면 피하자
애매한 작명은 피하자
나쁜예
int O = 0;
int l = 0;
if(O == 0)
if(l == 1)
프로그램에서 통용되는 용어로 작명은 피하자
Ex) HappyPoint 라고 해서 약어로 변수를 아래와 같이함.
String hp = “HappyPoint123”;
유닉스 플랫폼인 hp와 겹치기 때문에 비추.
accountList (x) → accountGroup , accounts ..
List accountList; (x) // 리스트컬렉션에 쓰여도 사용을 피하자
클래스와 메소드 이름을 잘 짓자
Class → 명사, 명사구
좋은예
Customer, WikiPage, Account
나쁜예
Manager, Processor, Data, Info
Method → 동사, 동사구
좋은예
postPayment, deletePage, save
접근자, 변경자, 조건자는 get, set, is 등을 붙여서 작명 (javabean 표준)
표기법 통일하자
- 카멜표기법 : 첫자 소문자, 대문자로 구분. Ex) String camelCase;
- 파스칼표기법 : 첫자 대문자 , 대문자로 구분 Ex) String PascalCase;
- 스네이크표기법 : 언더바로 구분 Ex) String snake_case;
*헝가리표기법은 사용하지말자 (MS에서도 권고 하지않음)
헝가리표기법 : 접두어에 자료형 표기 Ex) String strAnimalName;
함수를 잘 만들고 잘 사용하자
함수는 최대한 작게 만들자
함수는 작을수록 좋다.
함수는 한가지만 해라!
동일한 추상화 수준에서 작업을 처리해라.
부수 효과를 일으키지말자.
나쁜예
한 메소드에서 이름도 찾고.. 복호화도 하고.. 유효성체크와 세션초기화까지...
이 메소드에 너무 많은 책임이 부여되고있다.
public boolean checkPassword(String userName, String password){
User user = User.findByName(userName);
if(user != User.NULL){
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPhrase, password);
if(“Valid Password”.equals(phrase)){
Session.initialize();
return true;
}
}
return false;
}
서술적인 이름짓기 (1번 이름 잘짓기랑 중복~ 하지만 중요)
이름만 보고 뭐하는 녀석인지 판단이 가도록
includesetupAndTeardownPages(), getDBConnection()
플래그 파라미터는 지양하자
플래그를 받으면 자동으로 플래그를 판단하는 if문이 생기기때문에 함수가 2가지이상의 일을 한다는걸 공표하는 셈
String printResult(boolean isSuccess){
String result = “fail”;
if(isSuccess){
result = “success”;
}
return result;
}
파라미터는 적게
중복된 파라미터는 모델클래스로 관리하는게 좋아보인다.
Before
Circle makeCircle(double x, dobule y, double radius);
After
Circle makeCircle(Point center, double radius);
오류코드 리턴보단 예외처리
오류코드를 반환하면 오류코드를 곧바로 처리해야함.
if(deletePage(page) == E_OK) {
//정상 처리 코드
} else {
//오류코드 처리 코드
}
try catch는 뽑아내서 한곳에서
throws Exception 던져서 모아서 예외처리하자.
주석은 나쁜코드를 보완하지 못한다
주석을 주저리주저리 다는 이유
코드 품질이 나쁘기때문에(다 그렇다는건 아님)
코드로 이야기하자
1번 코드
if ((employee.flags &HOURLY\_FLAG) && (employee.age > 65)) // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다.
2번 코드
if(employee.isEligibleForFullBenefits())
둘 중 어느것이 더 깔끔할까?
주석은 이렇게 써보자
중요성을 강조
// 실행시간이 오래걸리니 실행하는데 주의하십시오.
Pattern
Pattern timeMatcher = Pateer.compile(“\\d_:\\d_:\\d\* \\w_, \\w_ \\d_, \\d_”); // kk:mm:ss EEE, MMM dd, yyyy
TEST 결과
assertTrue(a.compareTo(a) == 0); // a == a assertTrue(a.compareTo(b) != 0); // a != b
TODO
IDE에서 //TODO를 쉽게 찾을수 있다.
그렇다고 남발하지말자..
이런식의 주석 안쓰도록 해보자
이력을 표시하는 주석
형상관리에서 보자저자를 표시하는 주석
형상관리에서 보자코드에 주석처리
나중에쓸려고.. 그냥 지우자 쌓이고 쌓이면 가독성 떨어짐// InputStream resultsStream = formmater.getREsultStream(); // StreamREader reader = new StreamReader(resultsStream); // response.setContent(reader.read(formatter.getByteCount()));
그외 불필요한 주석
private코드에 javadocs 주석, 중복된 내용 주석 등
코드 컨벤션을 신경쓰자
Coding Convention?
Coding conventions are a set of guidelines for a specific programming language that recommend programming style, practices, and methods for each aspect of a program written in that language.
위키피디아에 위와 같이 정의되어있다.. 대충 프로그래밍 할때, 스타일과 가이드라인을 맞추자는 뜻
한 프로젝트에서 개발팀이 코드 스타일을 제각각 짠다면?
유지보수성이 개발 생산성이 떨어질것으로 보여짐
팀별로 코드 컨벤션을 통일하자
참고
Clean Code 애자일 소프트웨어 장인 정신
로버트 C. 마틴 지음 | 박재호 ・ 이해영 옮김