// Copyright (C) 2003 ,2004 ,2005 by Object Mentor, Inc. All rights reserved.
// GNU General Public License 버전 2 이상을 따르는 조건으로 배포한다.
//테스트 중인 Responder 인스턴스를 반환한다.
protected abstract Responder responderInstance();
- 하지만 함수 이름에 정보를 담을 수 있다면 함수로 의미전달을 하는게 더 좋다
protected abstract Responder responderBeingTested();
public int compareTo(Object o){
if(o instanceof WikiPagePath){
WikiPagepath p = (WikiPagePath) o;
String compressedName = StringUtil.join(names, "");
String complssedArgumentName = StringUtil.join(p.names, "");
return compressedName.compareTo(compressedArgumentName);
}
return 1;//오른쪽 유형이므로 정렬 순위가 더 높다.
}
public void testCompareTo() throws Exception {
WikipagePath a = PathParser.parse("PageA");
WikiPagePath ab = PathParser.parse("PageA. PageB");
Wikipagepath b = PathParser.parse("PageB");
WikiPagepath aa = PathParser.parse("PageA.PageA");
WikiPagePath bb = PathParser.parse("PageB. PageB");
WikipagePath ba = PathParser.parse("PageB. PageA");
assertTrue(a.compareTo(a) == 0); // a == a
assertTrue(a.compareTo(b) != 0); // a != b
assertTrue(ab.compareTo(ab) == 0); // ab == ab
assertTrue(a.compareTo(b) == -1); // a < b
assertTrue(aa.compareTo(ab) == -1); // aa < ab
assertTrue(ba.compareTo(bb) == -1); // ba < bb
assertTrue(b.compareTo(a) == 1); // b > a
assertTrue(ab.compareTo(aa) == 1); // ab > aa
assertTrue(bb.compareTo(ba) == 1); // bb > ba
}
//여유 시간이 충분하지 않다면 실행하지 마십시오.
public void _testWithReallyBigFile(){ ... }
public static SimpleDateFormat makeStandardHttpDateFormat(){
//SimpleDateFormat은 스레드에 안전하지 못하다.
//따라서 각 인스턴스를 독립적으로 생성해야 한다.
SimpleDateFormat df = new SImpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTImeZone("GMT"));
return df;
}
//TODO 현재 기본 전략만 반환하고 있다.
//기획팀과 비즈니스로직 성립시 신규 전략 추가가 필요하다.
public Strategy makeStrategy() throws Exception { return new DefaultStrategy(); }
String listltemContent = match.group(3).trim();
// 여기서 trim온 정말 중요하다. trim 합수는 문자열에서 시작 공백을 제거한다.
// 문자열에 시작 공백이 있으면 다른 문지열로 인식되기 때문이다.
new ListltemWidget(this, listltemContent, this.level + 1);
return buildList(text.substring(match.end()));
public void loadProperties()
{
try{
String propertiesPath = propertiesLocation + "/" + PROPERTIESJILE;
FilelnputStream propertiesStream = new FilelnputStream(propertiesPath);
loadedProperties. load(propertiesStream);
}catch(IOException e){
// 속성 파일이 없다연 기본강올 모두 메모러로 읽어 들였다는 의미다.
}
}
// this.closed가 true일 때 반환되는 유틸리티 메서드다.
// 타입아웃에 도달하면 예외를 던진다.
public synchronized void waitForClose(final long timeoutMiHis)
throws Exception
{
if( !closed)
{
wait(timeoutMillis);
if(!closed)
throw new Exception ("MockResponseSender could not be closed");
}
}
// this.closed가 true일 때 반환되는 유틸리티 메서드다.
// 타입아웃에 도달하면 예외를 던진다.
public synchronized void waitForClose(final long timeoutMiHis)
throws Exception
{
if( !closed)
{
wait(timeoutMillis);
if(!closed)
throw new Exception ("MockResponseSender could not be closed");
}
}
의무적으로 다는 주석
- 일관성을 유지하기 위해 주석을 달 필요는 없다
이력을 기록하는 주석
- git이나 svn을 사용
무의미한 주석
위치를 표시하는 주석
- 간혹 특정 배너아래 기능들을 모아놓으면 유용한 경우도있지만 대부분 가독성만 낮춘다
닫는 괄호에 다는 주석
- 조건문이나 반복문으로 블럭이 중첩될수록 닫는 괄호에 `//end of while` 과 같이 특수한 주석을 달아놓을 수 있지만 이건 좋은 주석이 아니라 코드의 추상화가 부족한 것이다
주석으로 처리한 코드
- 이유가 있어 남겨놓았을거라 추측하며 남겨두게되면서 비슷한 주석 코드들이 쌓여갈 수 있다
HTML 주석
- 최악의 주석. 편집기/IDE에서조차 읽기 힘들다.
전역 정보
- 코드 일부에 주석을 달면서 시스템의 전반적인 정보(ex: 포트번호)를 기술하지 않는다
너무 많은 정보
- 주석에 정보를 너무 많이 담는것은 독자에게 불필요하며 불가사의할 뿐이다
모호한 관계
- 주석과 주석이 설명하는 코드는 둘 사이가 명확해야 한다. 주석을 보면서 또 해석을 요구하는 상황이 벌어진다면 그것은 나쁜 주석이다
비공개 코드에서 Javadocs