스터디 매주 화, 금
화요일 금요일까지 각각 두장씩 읽고 각자 한 장씩 발표하기
분량에 따라 유동적으로 조정
화요일 : 진형 홀수 장, 시준 짝수 장
금요일 : 시준 홀수 장, 진형 짝수 장
우리가 작성하는 코드는 영어로 작성을 한다. 결국 사람이 읽을 수 있는 문자이기 때문에 가독성이 매우 중요하다. 모든 변수,파일에 이름을 붙이고 이름을 잘 지으면 한눈에 그 파일,변수,함수등의 의도를 파악할 수 있다.
알고리즘 문제를 풀때 흔히 단문자로 변수명을 사용하는 경우가 많다.
실제 개발을 할때는 의미가 분명하게 드러나도록 작성해야한다.
int d;//경과시간
int elapsedTime;//경과시간
public static void copyChars(char a1[],char a2[]){
for(int i=0;i<a1.length;i++){
a2[i] = a1[i];
}
}
위 코드는 a2에 a1의 내용을 copy하는 메소드이다.
하지만 메소드의 파라미터를 아래와 같이 바꾼다면 훨씬 읽기 쉬워진다.
public static void copyChars(char source[],char desination[]){
for(int i=0;i<a1.length;i++){
desination[i] = source[i];
}
}
class Customer{
private date genymdhms;
private date modymdhms;
}
class Customer{
private date generationTimestamp;
private date modificationTimestamp;
}
for(int j=0;j<34;j++){
s+=(t[j]*4)/5;
}
단문자와 상수가 포함되어 있기 때문에 5나 s를 검색한다면 5를 포함한 모든 이름을 찾기 때문에 원하는 단문자,상수를 아래처럼 가려내야 한다.
int realDaysPerIdealDay = 4;
private static final int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for(int j=0;j<NUMBER_OF_TASKS;j++){
int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
int realTaskWeeks = (realTaskDays/WORK_DAYS_PER_WEEK);
sum+=realTaskWeeks;
}
이름을 의미있게 지으면 메소드가 길어지지만 WORK_DAYS_PER_WEEK변수를 찾기는 매우 쉬워진다.
클래스 이름과 객체이름은 명사나 명사구가 적합하다.
메소드 이름은 동사나 동사구가 적합하다.
게터,세터등은 표준에 따라 접두사로 get,set,is를 붙인다.
생성자의 중복정의는 정적 팩토리 메서드를 사용
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
위 코드가 아래 코드보다 좋다.
Complex fulcrumPoint = new Complex(23.0);
private void printGuessStatistics(char candidate,int count){
String number;
String verb;
String pluralModifier;
if(count == 0){
number="no"
verb = "are"
pluralModifier = "s";
}else if(count == 1){
number="1"
verb = "is"
pluralModifier = "";
}else{
number=Integer.toString(count);
verb = "are"
pluralModifier = "s";
}
String guessMessage = String.format("There %s %s %s%s",verb,number,candidate,pluralModifier);
print(guessMessage);
}
함수가 길고 로직 부분에서 위 세변수를 함수 전반에서 사용한다.
함수를 쪼개고 세변수를 클래스에 넣는다면 맥락이 분명해진다.
맥락을 개선하면 쪼개기가 쉬워지고 알고리즘도 명확해진다.
public class GuessStaticsMessage{
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate,int count){
createPluralDependentMessageParts(count);
return String.format("There %s %s %s%s",verb,number,candidate,pluralModifier);
}
private void createPluralDependentMessageParts(int count){
if(count == 0){
thereAreNoLetters();
}else if(count == 1){
thereIsOneLetter();
}else{
thereAreManyLetters(count);
}
}
}