Clean Code that Works.

CODE COMPLETE


와.. 두껍다 -ㅅ-;;;
이번달은 개념서를 좀 읽어야 겠다.
이거랑.. 생각하는 프로그래밍.

이번엔 집중해서 재빨리 읽어 버리자!!!

리포지토리

Java2008. 8. 10. 16:20
애플리케이션 개발에 관련된 정보를 보관해 둔 데이터베이스. 정의(定義) 정보, 설계 정보, 프로그램 및 시험 결과 등의 응용 프로그램 개발에 대한 각 공정 과정에서 발생한 정보를 축적해서 공정간에 공용하거나 궤환되도록 컴퓨터 이용 소프트웨어 공정 툴이 지원된다. 리포지토리에 격납하는 정보 모델에는 객체 지향의 모델을 채용하는 방법 외에 분산 환경에서의 개발에 대응해서 구내 정보 통신망(LAN) 서버상에 리포지토리를 두는 방법도 있다. 데이터 웨어하우스에서 사용하는 데이터의 물리 정보 및 논리 정보를 메타 데이터라 하는데, 이 메타 데이터를 격납하는 표를 리포지토리라고 부르는 경우도 있다. →컴퓨터 이용 소프트웨어 공정 툴.

from 네이버 백과.


Lucene Highlighting.

Java2008. 8. 8. 16:39
루씬 하일라이팅..

http://hudson.zones.apache.org/hudson/job/Lucene-trunk/javadoc//contrib-highlighter/org/apache/lucene/search/highlight/Highlighter.html

저기 살펴보면 루씬 API에 분명히 있다고 되어 있다.
하지만 루씬 코어.jar 파일안에는 없다.

=_ =..
그래서 구글링을 해본 결과 따로 파일들을 받아서
루씬 코어.jar 파일을 다시 빌드 하던가.
따로 만들어서 쓰던가 해야 한다..

뭥미 -_-.. doc에 넣었으면 코어에도 좀 넣어 주지 =_=..

http://svn.apache.org/repos/asf/lucene/java/trunk/contrib/highlighter/src/java/org/apache/lucene/search/highlight/

위의 url에 가면 관련 클래스 java 파일을 받을 수 있고.
이클립스에서 루씬 코어.jar 파일을 열어서 다운 받은 파일을 첨부한 다음
export 해서 사용중..

음.. =ㅂ=...

근대 이거 어렵네 -_-....

그냥 주석 -ㅂ -..

Java2008. 8. 1. 10:13
/**
 *
 *
 */

이런 형태의 주석... 이거 이름이 따로 있었던거 같은데..
여튼 요즘엔 코딩 하면서 클래스나 메서드 앞에는 꼭 저걸 붙여서 설명을 달아 둔다.
나중에 확인해야 할것도 있고 혹시 다른 사람이 내 코드를 볼 것을 대비해서.

이클립스에서는 /** 이렇게 하고 엔터를 치면 자동으로 파라미터 라던지 메서드나 클래스에 대한 정보를 생성해준다. 유저는 그냥 거기옆에다가 설명을 적어 주기만 하면 되고..
이렇게 만들어 주면 유지 보수에도 좋지만 나중에 메서드를 사용할 때 코드 어시스트를 보면 메서드에 대한 설명까지 같이 나오기 때문에 참 좋다.

사용자 삽입 이미지

이런 형식으로 사용하거라~!



음..
자바의 정석에서 발췌.

1. 제네릭스(Generics)
- 제네릭스는 컬력신 프레임웍과 관련된 기능으로 컬렉션에 저장하는 객체의 타입을 컴파일시에 체크하기 때문에 객체의 타입 안정성을 높이고 꺼낼 때는 자동으로 형변환해주기 때문에 편리하다.

2. 향상된 for문
- 배열
    for (배열의 타입 변수명 : 배명) {
          // 반복할 문장
    }
- 컬렉션
    for (컬렉션에 저장된 요소의 타입 변수명 : 컬렉션) {
          // 반복할 문장
    }

3. 오토박싱
- 컬렉션에는 객체로 저장해야하기 때문에 기본형 값을 저장하기 위해서는 Integer나 Long과 같은 Wrapper클래스를 사용해야했다.
  그러나 이제부터는 기본현 값을 직접 컬렉션에 저장할 수 있다. 컴파일러에 의해서 자동적으로 Wrapper클래스로 변환되어 저장되는 데 이것을 오토박싱 이라고 한다.
  뿐만아니라 저장되 값을 꺼낼 때도 변환과정을 거치지 않고도 기본형 형태의 값을 바로 얻을 수 있는데 이것을 언박싱 이라고 한다.

4. 타입에 안전한 열거형
- 이전 방식으로는 타입이 달라고 값이 같으면 조건식결과가 true였으나, 새로 도입된 타입에 안전한 영거형에서는 실제 값이 같아도 타입이 다르면 조건식의 결과가 false가 된다.

5. 가변인수
- 기존에는 메서드의 매개변수 개수를 고정적으로 지정해주어야만 했으나 JDK1.5 부터는 동적으로 매개변수의 개수를 지정해 줄 수 있게 되었다.

6. static import문
- import문을 사용하면 크래스의 패키지명을 생략할 수 있는 것과 같이 static import문을 사용하면 static멤버를 호출할 때 클래스명을 생략할 수 있다.

7. StringBuilder
- StringBuilder는 StringBuffer와 완전히 동일한 클래스이다. 다만 동기화 처리를 하지 않기 때문에 멀티쓰레드 프로그래밍에서는 사용하면 안되지만 멀티쓰레드 프로그래밍이 아닌 경우에는 StringBuffer보다 빠른 성능을 보장한다.
  동기화여 부를 제외하고는 두 클래스가 기능상으로 완전히 동일하기 때문에 코드에서 StringBuffer를 StringBuilder로 바꾸기만 하면 된다. 즉, StringBuffer타입의 참조 변수를 선언한 부분과 StringBuffer의 생성자만 바꾸면 된다는 말이다.

properties 는 iso-8859-1 인코딩방식을 쓰기 때문에 한글을 입력해서 나중에 쓸때 깨진다.
이클립스에서 이것을 안깨지고 보게 할려면.. 간단한 플러그인을 추가 하면 된다.

이클립스 find and install 메뉴에 가서
새로운 리모트 사이트를 추가 하는데.
이름은 간단하게 Properties
주소는 http://propedit.sourceforge.jp/eclipse/updates
이렇게 추가를 하고 업데이트를 하면

다운로드 받을수 있는 목록이 3가지 뜬다.
거기서 가운데껏만 빼고(3.1.x 버전용)
나머지 두개를 인스톨한 후 사용하면 된다.

http://cafe.naver.com/snp6th.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=422
참고 사이트

그 머시기.

SWT 로 구현된 것을 RCP로 바꾸기.

어쩌다 보니 간단한 XML 에디터 까지 개발해야 해서...
완전 삽질중. -_-;;
작년 9월부터 시작한걸 아직까지 잡고 있다.
뭐 중간에 캐나다고 갔다오고.. 하기 싫어서 다른 책도 보고 했지만..
이제 슬슬 끝이 보인듯 싶다. 역시 GUI는 번거롭다.

여튼 각설하고 XPATH로 원하는 노드를 찾은 후 XML 문서에 저장 하는 방법을 알아보자.

일단 처음엔 XPATH를 사용해야하기 때문에 XPathFactory 로 새 인스턴스를 만든 후, XPath도 새로 만들어 준다.

XPathFactory xpathFactory = XPathFactory.newInstance();
xpath = xpathFactory.newXPath();
xmlSource = new InputSource(Main.TESTSOURCE);
// 인풋 소스는 해당 xml 파일.

이렇게 해서 각각 인스턴스들을 만든후.
xpath 검색을 해서 엘리먼트에 할당한 다음에
이 엘리먼트에서 수정을 한 후.

Element element = (Element) xpath.evaluate(path, xmlSource, XPathConstants.NODE);
//xpath를 사용해서 검색.
Element root = (Element) element.getParentNode().getParentNode()
    .getParentNode().getParentNode();
//루트는 새로 문서를 저장할 때 필요하기 때문에 필요하다. 나 같은 경우에는 xpath를 사용해서 검색한 깊이가 4단계 이기 때문에 4번째 위의 부모 노드가 루트 노드이다.
Element feature = (Element) element.getChildNodes().item(3);
feature.setTextContent("원하는 데이터");
//해당 노드를 얻어 와서 setTextContent를 사용해서 값을 할당


이렇게 하면 일단 메모리에 올라와 있는 element 들은 다 수정이 되어 있다.
그 다음에는 TransformerFactory 를 사용해서 문서를 다시 저장해 주어야 한다.

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
DOMSource source = new DOMSource(root);
StreamResult result = new StreamResult(new File(Main.TESTSOURCE));
transformer.transform(source, result);


DOM 객체를 수정, 추가, 제거하는 것은 모두 메모리상에서 이루어지고 이것을 영구 보본하기 위해서는 파일의 형태로 XML 문서로 저장해야 한다.

다양한 방법으로 문서를 저장 할 수 있지만 위의 방법은 XSLT변환기를 사용하여 파일로 저장한다.

루씬 검색 결과에 검색어 문자열 하일라이팅을 추가 하기 위하여..

http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SearchStyleText.htm

위의 소스를 참고하여 .. 머 똑같이 -_-;;
하여서 구현.

깔끔하고 이해하기 쉽운 소스를 만들기 위해 구입한 책.
리팩토링 중에서 자주 쓰이는 것들을 간단한 예제와 함께 잘 정리해 두었다.
아주 쉽게 읽을수 있었던 책.

주요 내용은

- 매직넘버를 심볼릭 정수로 치환하기 : 소스에 '100'이라고 쓰여져 있다면.
- 제어 플래그의 삭제 : 제어 플래그 때문에 코드를 읽기 힘들다면.
- assertion의 도입 : '이것이 성립될 것' 이라고 하는 주석이 있으면.
- NULL 오브젝트 도입 : Null 체크가 너무 많다면.
- 메소드의 추출 : 코드가 너무 길어 읽기 힘들다면.
- 클래스의 추출 : 클래스의 책임이 너무 많다면.
- 타입코드를 클래스로 치환하기 : 오브젝트 식별에 int가 사용되고 있다면.
- 타입코드를 서브클래스로 치환하기 : 타입코드마다 동작이 다르다면.
- 타입코드를 State/Strategy로 치환하기 : 타입코드마다 동작이 다르다면.
- 오류 코드를 예외로 치환하기 : 오류 처리가 어지럽게 흩어져 있다면.
- 생성자를 Factory Method로 치환하기 : 클래스명이 new로 하드코딩 되어 있다면.
- 관찰되는 데이터의 복제 : 모델과 뷰가 혼재되어 있다면.
- 상속을 위임으로 치환하기  : IS-A관계가 아님에도 불구하고 상속하고 있다면.
- 위임의 은폐 : 위임 클래스까지 보인다면.
- 상속의 분할 : 상속이 얽혀 있다면.

아.. 보면서 내가 짰던 프로그램을 생각해보니..
리팩토링 해야할 것들이 ... ㄷㄷㄷㄷ
주말엔 소스 리팩토링좀 하자 ;ㅁ ;