1월에 그만둔 회사의 직원분들을 만나서 이야기를 나누었습니다. ^^;

현재 근무지의 상황과 개발 상황에 대한 이런저런 이야기들을 나누다보니,
'서둘러서 그만둔 것이 다행이구나' 라는 생각이 들더군요.
그만큼 현재 남아있는 사람들의 업무에 대한 과중과 여러가지 상황들이 뒤엉켜
발을 빼기 어려운 상황이었습니다. 거기에 계신 분들도 나올 채비를 하고 계신
이들이 많았습니다.

그분들과 이런저런 이야기를 나누면서, 개발 과정에서 작성된 프로그램 때문에
발생하는 문제들에 곤혹을 치르고 있다는 이야기가 화제가 되었습니다.

그런 이야기를 나누다보니, 일정에 좇기어 아무런 생각없이 
'돌아가기만 하면 돼!'
라는 생각을 하면서 작성했던 기능들이 하나둘 떠올랐습니다.
당시에는 원하는 결과만 나오면 됐습니다. 정해진 할당량을 완수하는 것도
벅찬 상황이었습니다. 슬프디 슬픈 개발 경험이었습니다. 

그런데 지금 그 코드(이것조차도 이제는 레거시 코드구나!)들을 떠올리다가 보니
얼굴이 확 달아오르더군요. ㅎㄷㄷ

앞으로는 그런 코드를 짜지않도록 최선을 다할 것입니다.
여전히 제가 만들어낸 녀석들은 서툴기도 하고 오류도 많이 내겠죠. 그러나,
나의 성장과 함께 내가 작성하는 코드들도 조금씩 발전했으면 합니다.

내가 만든 코드를 보며,
최고에요!
최고에요! by HopeLand 저작자 표시비영리변경 금지
'최고에요!'
라고 찬사를 받을 그날을 꿈꾸며,
 나는 개발자의 길을 가렵니다.
실용주의프로그래머
카테고리 컴퓨터/IT > 프로그래밍/언어 > 프로그래밍일반
지은이 앤드류 헌트 (인사이트, 2007년)
상세보기


 만약 자신이 이렇다면...  이걸 고려해 보라...
나는 여러 개의 에디터에서 기본적인 기능만 사용한다.  강력한 에디터 하나를 골라서 그걸 제대로 익혀라. 
선호하는 에디터가 있긴 한데, 그 기능을 모두 사용하진 않는다.  그걸 배워라. 입력해야하는 키 개수를 줄여라. 
선호하는 에디터가 있고 가능하다면 그걸 사용한다.  이미 하는 작업 외에 좀 더 많은 작업에 사용하도록 확장해 보라. 
나는 여러분들이 바보라고 생각한다.
윈도우 메모장은 이제까지 만들어진 에디터 가운데 최고다. 
여러분이 그 에디터를 사용하면 행복하고, 또 생산적이라면 그걸 사용해라. 하지만 스스로가 '에디터 선망'에 걸릴 수 있다는 생각이 들면 스스로의 위치를 재평가할 필요가 있을 것이다. 


Vi 와 Vim.
Vim 쪽에 관심을 기울여봐야겠구나. 

package system.tunning;

public class StopWatch {
	private long startTime;
	private long elapsedTime = 0;
	private StringBuffer currentName;
	private boolean threadFlag = false;
	

	public StopWatch() {
		currentName = new StringBuffer();
		startTime = System.nanoTime();
	}
	
	public StopWatch(boolean threadFlag) {
		changeMessage("", threadFlag, true);		
	}
	
	public StopWatch(String message) {
		changeMessage(message, false, true);
	}
	
	public StopWatch(String message, boolean threadFlag) {
		changeMessage(message, threadFlag, true);
	}
	
	public void start() {
		startTime = System.nanoTime();
		elapsedTime = 0;		
	}
	
	public void stop() {
		elapsedTime = System.nanoTime() - startTime;
	}
	
	public void changeMessage(String message, boolean threadFlag, boolean resetFlag) {
		StringBuffer threadName = new StringBuffer();
		this.threadFlag = threadFlag;
		
		if(threadFlag) {
			threadName.append("ThreadName = ").append(Thread.currentThread().getName());
		}
		
		this.currentName.append("[").append(message).append(threadName).append("] ");
		
		if(resetFlag) {
			start();
		}
	}
	
	public double getElapsedMS() {
		if (elapsedTime == 0 ) 
			stop();
		return elapsedTime/1000000.0;
	}
	
	public double getElapsedNano() {
		if (elapsedTime == 0 )
			stop();
		return elapsedTime;
	}
	
	public String toString() {
		if (elapsedTime == 0) 
			stop();
		currentName.append("elapsed Time : ").append(elapsedTime/1000000.0).append("ms");
		return currentName.toString();
	}
}

클린코드
카테고리 미분류
지은이 로버트 C. 마틴 (케이앤피IT, 2010년)
상세보기


import java.io.BufferedReader;
import java.io.File;
import java.util.List;
import java.util.Set;

public class CodeAnalyzer {
	private int lineCount;
	private int maxLineWidth;
	private int widestLineNumber;
	private LineWidthHistogram lineWidthHistogram;
	private int totalChars;

	public CodeAnalyzer() {
		lineWidthHistogram = new LineWidthHistogram();
	}
	
	public static List<File> findJavaFiles(File parentDirectory) {
		List<File> files = new ArrayList<File>();
		findJavaFiles(parentDirectory, files);
		return files;
	}
	
	public static void findJavaFiles(File parentDirectory, List<File> files) {
		for(File file : parentDirectory.listFiles()) {
			if (file.getName().endsWith(".java"))
				files.add(file);
			else if (file.isDirectory())
				findJavaFiles(file, files);
		}
	}
	
	public vvoid analyzeFile(File javaFile) throws Exception {
		BufferedReader br = new BufferedReader(new FileReader(javaFile));
		String line;
		while ((line = br.readLine()) != null)
			measureLine(line);
	}
	
	private void measureLine(String line) {
		lineCount++;
		int lineSize = line.length();
		totalChars += lineSize;
		lineWidthHistogram.addLine(lineSize, lineCount);
		recordWidestLine(lineSize);
	}
	
	private void recordWidestLine(int lineSize) {
		if (lineSize > maxLineWidth) {
			maxLineWidth = lineSize;
			widestLineNumber = lineCount;
		}
	}
	
	public int getLineCount() {
		return lineCount;
	}
	
	public int getMaxLineWidth() {
		return maxLineWidth;
	}
	
	public int getWidestLineNumber() {
		return widestLineNumber;
	}
	
	public LineWidthHistogram getLineWidthHistogram() {
		return lineWidthHistogram;
	}
	
	public double getMeanLineWidth() {
		return (double)totalChars/lineCount;
	}
	
	public int getMedianLineWidth() {
		Integer[] sortedWidths = getSortedWidths();
		int cumulativeLineCount = 0;
		for (int width : sortedWidths) {
			cumulativeLineCount += lineCountForWidth(width);
			if (cumulativeLineCount > lineCount)
				return width;			
		}
		throws new Error("Cannot get here");
	}
	
	private int lineCountForWidth(int width) {
		return lineWidthHistogram.getLinesforWidth(width).size();
	}
	
	private Integer[] getSortedWidth() {
		Set<Integer> widths = lineWidthHistogram.getWidths();
		Integer[] sortedWidths = (widths.toArray(new Integer[0]));
		Arrays.sort(sortedWidths);
		return sortedWidths;
	}
	
}


is(6) 메소드에서 오류가 나는 이유를 몰랐다!

package springbook.learningtest.jdk;

import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;


public class ReflectionTest {
	@Test
	public void invokeMethod() throws Exception {
		String name = "Spring";
		
		//length()
		assertThat(name.length(), is(6));
		
	}
}


이클립스 환경을 보면, 
에서 보는 것처럼 hamcrest 가 추가되어 있는데 말이다. ㅡ_-);; 저걸로 부족했던건가?

그래서 인터넷을 뒤지다보니 
두 개의 글을 보고서 무언가가 빠졌다는 것을 느꼈다. 그래서 급히 인터넷을 검색
구글 검색 : hamcrest library eclipse
hamcrest 위키를 발견했다. 
그곳에서 hamcrest-all-1.2.jar  받아서 java lib/ext에 추가했다.
그리고 이클립스를 재가동 한 후에
import static org.hamcrest.CoreMatchers.*;
을 추가하고 나니 별 이상없이 정상적으로 수행된다.

Junit(4.8) 에 기본포함되어 있는 hamcrest core 에 존재하는 Matcher 클래스와는 다른 별도의 패키지에 is(int) 형 메소드가 존재하는 것으로 보인다!? 맞나?
이건 어디까지나 나의 섯부른 추측일 뿐이다. ㅡ_-);

+ Recent posts