달력

072010  이전 다음

* 다시 떠올리기 위해 날짜 갱신

대소문자 변환 단축키를 잊어버려서, Ctrl+Shift+L 키로 단축키를 찾아본다. Ctrl+Shift+X 또는 Ctrl+Shift+Y 다. 아쉬운 건 토글이 안된다는 점...

사용자 삽입 이미지
Posted by 영회

Java > Editor > Templates 에서 Import 해서 사용할 수 있다.

포함하는 템플릿

debug ... if 조건이 있는 debug 문 작성용
        if (logger.isDebugEnabled()) {
            logger.debug("Initializing ...");
        }


참고: 자주 쓰는 구문 템플릿(Templates)으로 등록하기
Posted by 영회
이클립스에서 Ctrl 키와 함께 클릭을 하면, 해당 식별자가 정의된 곳으로 이동한다. 클래스를 클릭하면 클래스를 정의한 자바 파일로 가고, 메소드를 찍으면 자바 파일에서 해당 메소드를 향해 가고, 변수를 클릭하면 변수를 정의한 곳으로 이동한다. 그런데 소스 코드가 없는 클래스 혹은 그 클래스의 메소드를 클릭하면 어떻게 될까? 다들 알다시피 다음과 같은 휑한 장면을 만나게 된다.


위에서 Attach Source... 버튼을 클릭하고, PC 어딘가에 다운받은 소스를 찾아 넣어주면 내가 사용하는 클래스나 라이브러리로도 이동할 수 있다. 이와 같이 소스를 부착하고 쓰다 보면 자연스럽게 내가 사용하는 라이브러리에 대한 지식이 높아지고 디버깅도 용이하다. 물론, 해당 소스를 읽는다는 전제가 따른다.

부가적으로 몇 가지 이점을 더 갖는다. 소스에는 Javadoc 주석이 있기 때문에 Javadoc API를 이클립스에서 바로 볼 수 있다.


여기에 더해서 잘 드러나지 않지만, 코딩 생산성(?)에 꽤나 영향을 미치는 효과가 있다. 이클립스 JDT에서 자동 완성(Code Assist)은 이제 없어서는 안될 기능이다. 소스가 없는 라이브러리를 사용할 때 자동완성을 사용하면 다음과 같이 변수명이 만들어진다.


문맹(?) 수준의 자바 구사를 하고 싶다면 그대로 두어도 좋다. 그러나, 대부분의 상식적인 개발자라면 변수 이름을 변경할 것이다. 사용하는 API가 늘어나면 수정을 위해 타이핑하는 자판 수나 마우스클릭도 늘어난다. 사실 이보다 더 두드러져 보이는 현상이 하나 더 있다. 다음과 같이 소스 부착을 한 후에 생겨난 자동 완성 코드를 보자.


만일 rejectValue() 메소드에 들어가는 인자/매개변수가 뭔지 가물가물하다고 생각해보자. 나에게 그런 일은 너무나도 잦다. 그럼, API 문서를 열어서 볼 것인가? 만일 위와 같이 생성되었다고 해보자. 적절한 작명으로 만든 API라면 굳이 문서를 열 필요가 없다. arg0, arg1 이라면 문서가 필요하지만... ^^
Posted by 영회
이전에도 한 가지 난관을 해결하는 팁, 가니메데 플러그인 업데이트 팁 을 올린 바 있다. 비슷한 이유지만, 종종 설치에 어려움을 겪는 사람들을 볼 수 있다. Software Update 에서 Add Site... 를 선택하고, url을 입력해도 해당 사이트가 화면에 나타나지 않는 경우가 있다.

사용자 삽입 이미지

이럴 땐 가니메데 플러그인 업데이트 팁 에서와 같이 Manage Sites... 를 선택하여 직접 체크해주면 나타난다. 그 후 설치하면 OK

사용자 삽입 이미지

Posted by 영회
4. 이슈간 링크는 '#번호'
이슈/티켓 사이에 관계가 있는 경우가 비일비재하다. #과 이슈 번호를 붙여 쓰면 마일린 내부 링크가 만들어진다. 좋아~


3. SI 형태로 프로젝트를 수행하는 경우, 고객 사이트의 보안측면에서 프로젝트 룸을 떠나면 개발환경 즉, 각종 저장소에 접근이 힘든 경우가 일반적이다. 이런 경우 오프라인으로 작업할 수 있는 기능은 무척 편리하다. 노트북을 사용하는 경우에 물리적인 공간에 대한 제약이 없지만, 맥락에 대한 유지없어 나홀로(?) 작업을 하는 것이야 언제나 가능하다. 그러나, 완전하지는 않지만, 텍스트 기반으로 이력을 저장하는 svn/cvs류는 협업을 원격에서 할 수 있게 해준다.


 마일린의 경우도 이른 지원한다. 로컬에서만 티켓의 상태나 부가정보를 변경하여 저장하면 위 그림처럼 화살표 아이콘이 등장하고, 이후 제출(submit)하면 동기화가 이러난다. 온라인으로 프로젝트 관리 등을 지원하는 도구들이나 웹 기반 이슈 트래커는 오프라인에서 작업이 불가능한 것이 일반적이란 점을 생각하면, 짜투리 시간까지 활용할 수 있게 하는 정말 유용한 기능이다. 자칫 인터럽트에 의해서 깜빡했던 작업관리/이슈관련 커멘트를 놓쳐버리는 일도 줄여줄 수 있다. ^^

2. Trac에서 Mileston을 적용했는데도, 드롭다운 리스트에 나타나지 않는 경우. 갱신을 해도 마찬가지일 때가 있다. 해당 티켓을 다시 submit하고 다시 드롭다운 리스트를 보라.
사용자 삽입 이미지

1. 마일린의 Planning 탭 스케줄 기능으로 팀원 일정 관리를 하려했더니만... Personal Planning의 경우는 개인별 스케줄 관리로 공유가 안되었다. 주의할 것.. ㅡㅡ;
사용자 삽입 이미지

Posted by 영회
다음과 같이 equals()를 작성해서 Object.equals()를 오버라이딩 했다고 해보자.

     public boolean equals(Object obj) {
        if (obj == null || ! (obj instanceof SomeClass)) return false;
       
        SomeClass that = (SomeClass)obj;
        return ((this.fieldA== null && that.getFieldA() == null) || this.fieldA.equals(that.getFieldA()))
     && ((this.fieldB == null && that.getFieldB() == null) || this.fieldB .equals(that.getFieldB()));
    }

이 코드가 과연 어떤 문제가 있을까? 실제로 이런 코드에 단위 테스트가 없다면 쉽게 버그를 찾기 힘들다. 자바 기초를 배우는 때라면 오히려 쉬울지 몰라도, 수천 개 혹은 수만 개 클래스에 속한 메소드라면 더욱 어렵다.

아래 테스트 코드로 문제를 찾아낼 수 있었다.

// someObject 는 정상적으로 초기화
    public void testEqualsObject() {
        try{
            new SomeClass (null, null, null, null, null).equals(someObject);
        }catch (NullPointerException e) {
            fail(e.getClass().getName() + " is caught");
        }
    }

또한, 위 코드를 작성했을 때, hashCode() 는 빼먹었다고 하면 hashCode() 의 contract를 위반한다. 더구나 hashCode()를 효율적으로 작성하려면 알고리즘도 고민해야 한다. 고맙게도 이클립스는 알고리즘까지 포함하여 일반화 한 구현을 제공한다. 과거에는 별도 플러그인이 필요했던 것 같은데, 현재는 JDT 안에 기본으로 내장하고 있다.


Source 메뉴(Alt+Shift+S)에서 Generate hashCode() and equals()... 를 찾을 수 있다. 그러나, 이클립스가 은총알(silver bullet)은 아니기 때문에 equals() 에 사용할 필드는 지정해줘야 한다. 또한, 단순 비교가 아닌 방법으로 구현할 문제라면, 생성한 코드를 수정하는 것은 좋은 습관일 듯 하다. 아래는 사례로 올린 화면이라 속성 명은 좀 다르다.


결론적으로 일반적인 환경이라면 equals/hashCode()를 직접 구현하기 보다는 이클립스로 자동생성해서 혹시라도 발생할 수 있는, 그러면서 오류가 잘 드러나지 않는 버그를 만들지 말자.
Posted by 영회
사용자 삽입 이미지

가니메데를 쓰다보니 맞춤법 검사가 기본적으로 실행하나 보다. 내 이름을 타이핑했더니만, 빨간펜(?)이 따라온다. Quick Fix(Ctrl+1)를 시도하니 annoying을 추천하더니.. ㅋㅋ.
  • 맞춤법 검사(spell checking)을 비활성하거나
  • 현재 세션에선 무시하기에 이어서
  • 사전에 추가하기
같은 조언을 제공한다. Prompt에서 OK하면, Preferences가 자동으로 뜬다. 여기서 User defined dictionary 경로를 지정해야 한다. 텍스트 파일을 하나 만들어서 지정해주니까 빨간줄이 사라진다. ^^
사용자 삽입 이미지

해당 파일을 열어보면 어휘가 추가되어 있는 것을 확인할 수 있다.

사용자 삽입 이미지

R.J. Lorimer의 글을 보면 맞춤법 검사에 대한 이력과 함께, 공개한 사전을 받을 수도 있다.
Posted by 영회
사용자 삽입 이미지

Problems 뷰에 개선이 있었다. 위에 보이는 것처럼 사전 정의한 다양한 필터를 제공한다. Problems 뷰의 경우 애플리케이션 개발자 입장에서는 보고 싶지도 않는 온갖 에러정보를 줘서 무시하는 경우가 많았다. 그래서인지 새로운 기능의 효용성에 대한 감이 없다. Congifure Contents 설정을 통해서 복잡한 조합으로도 뷰를 구성할 수 있다.

Form-based configuration dialog

이 보다 눈에 띄는 것이 Marker 뷰의 등장이다. Marker 뷰를 이용하면, problems, bookmarks, tasks 뷰 셋을 통합해서 볼 수 있다.

사용자 삽입 이미지

아래는 Problems 뷰 개선사항 요약이다:

  • Predefined filters for all errors and warnings on selection.
  • Union or intersection of problems showing.
  • A forms based configuration dialog.
  • Use of the commands defined in the workbench rather than custom actions. This means consistency with key bindings and the main window menu.
  • Working sets as first class selection sources. For instance, if the Package Explorer view is showing working sets and the Problems view is filtering on selection, you will only see the problems in that working set.
  • Show multiple content sets. The Problems view allows you to see all markers, or just the problems.

출처: http://download.eclipse.org/eclipse/downloads/drops/R-3.4-200806172000/whatsnew3.4/eclipse-news-all.html

Posted by 영회

Software Updates and Add-ons Dialog

3.4 에서 보는 새로운 UI. 강점은 아래와 같다.

The Installed Software tab only shows you the exact software items that you chose to install, rather than listing everything that is installed on your system. When you update software, all prerequisites of the software being updated will also be updated as needed.

꼭 필요한 부분만 보이게 해서, 사용자에게 복잡함을 숨기는 것. 미덕이다. UI 수준이니까 사용성(Usablity)라고 할 수도 있고, 객체지향원칙인 캡슐화(Encapsulation)를 적용한 것으로 해석할 수 있다.

하지만, 모든 것이 좋을 수만은 없다. 정상적인 상황에서는 문제가 없는데 문제가 발생하면, 위에서 캡슐화를 적용함으로써 암묵지(Implicit Knowlede)가 필요하다. 가니메데 플러그인 업데이트 팁에서 관련 내용을 정리한 바 있다. 앞 의 글에서 언급한 것과 비슷한 상황은 메이븐(Maven)을 사용할 때도 겪을 수 있다. Transitive Dependency는 유용할 때도 있지만, 복잡한 의존성을 가진 경우 Transitive Dependency 메커니즘을 쓰지 않고, 명시적으로 의존성에 대한 정의를 하는 것이 유리하기도 하다.

그 외에 위 화면에서 update 사이트 URL을 드래그앤드롭으로 추가할 수 있는 기능도 추가했다. 얼핏 유용해보이지만, 실제로 해보면 실효성은 의문이다. 그래도 개인의 기호에 따라 요긴할 수 있다. 빠른 검색을위한 필터들이 추가된 것은 잘 활용하면 요긴해보인다.

Filtering the Available Software page


Checkbox controls in the Available Software page


출처: http://download.eclipse.org/eclipse/downloads/drops/R-3.4-200806172000/whatsnew3.4/eclipse-news-all.html
Posted by 영회
가니메데 설치 후, Help > Software Updates... 명령으로 플러그인을 설치하려다 보면  download.eclipse.org로 시작하는 수많은 Location을 검색하는 통에 긴 대기 시간이 필요하다. 서울에서도 그랬는데, 연길에서는 아예 설치가 불가능할 정도였다. 아래와 같이 Help > Software Updates... 명령 수행 후에 Available Software 탭을 선택한 후 바로 Install 하지 말고, Manage Sites... 명령을 선택한다.

사용자 삽입 이미지

그리고, 본인이 필요한 사이트를 택한 후, download.eclipse.org로 시작하는 사이트 선택을 취소한 뒤에 OK하고 돌아와서 Install 한다. ^^

사용자 삽입 이미지

Posted by 영회
그새 마이너 업그레이드를 한 모양이다. 파일명이 eclipse-jee-ganymede-SR1-win32.zip 이다. eclipse-jee-ganymede-win32.zip에 비해 약 393kb가 커졌다. 새로 추가한 것을 쉽게 찾을 수가 없어 불편하다. 다운로드한 readme로는 알 수가 없었고, 아래 링크에서 해당 내용을 찾을 수 있다:

http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/ganymedesr1


Posted by 영회
영어 안들려도 눈으로만으로도 쉽게 TDD 기초를 익힐 수 있는 동영상



출처: Video tutorial: Test Driven Development in practice
Posted by 영회
TAG TDD
사용자 삽입 이미지

Posted by 영회
TAG PDE
(개인용)

CVS
spring
:pserver:anonymous@springframework.cvs.sourceforge.net:/cvsroot/springframework

SVN
spring-security: http://acegisecurity.svn.sourceforge.net/svnroot/acegisecurity/spring-security/trunk/

hibernate: http://anonsvn.jboss.org/repos/hibernate/core/
Posted by 영회
TAG CVS, svn
동료들은 잘 들어가는데, 계정 정보가 맞아도 이클립스 마일린에서는 로그인이 불가했다. 메시지는 "Insufficient permissions for selected access type"

사용자 삽입 이미지

위에 보이는 창을 수십번은 봤다. ㅡㅡ;

구글링해서 첫 줄에 나온 링크로 문제를 해결했다: [Trac] Problems accessing trac via Mylar
역시 구글!! 마일린 커넥터 Trac 2.3.2 버전으로 업데이트해서 문제가 바로 해결했다.
Posted by 영회
적절한 시점에 포스팅한 이클립스 플러그인 - jAutodoc덕에 좋은 플러그인을 알았다.
한눈에 이거다 싶지만, 코드생성기류의 플러그인에서 반드시 확인할 점. 기존 코드, 여기서는 주석은 어떻게 처리하느냐? 덮어쓰느냐? 중복해서 만들어지느냐? 정답은??

가장 SMART한 선택이다. 이미 Javadoc이 있으면 안 만들고, 없을 때만 만든다. ^O^ (물론 대치하게 만들 수도 있다.)

사용자 삽입 이미지

더불어 여러 프로젝트 사용을 위한 템플릿까지 지원한다.


자세한 내용은 도움말을 통해 쉽게 배울 수 있다.

Posted by 영회
이클립스에서 다음과 같이 작성한 주석이 문자 그대로 보여서...

/**
 * <p>
 * 설명 넣어주세요.
 * </p>
 *
 * @author $Author$
 * @version $Revision$
 * @since $Date$
 *
 */

해결책은 김종윤책임께서 알려주심. 'Team>Set Keywords...'  메뉴를 이용하면 대화창이 뜬다.

사용자 삽입 이미지

키워드를 선택하고 OK를 누르면 선택한 리소스의 svn:keywords 속성에 해당 키워드를 추가한다. 서브버전은 이 속성을 이용하여 동적으로 버전 관리하는 파일에 키워드에 해당하는 특정 정보를 추가한다.
Posted by 영회
2008.10.14. 오늘 또 느껴서.. 이런 글 쓰려고 했다... 이미 썼었군. @@

'svn 이 cvs 보다 좋은 점을 모르겠다'라고 하는 분을 최근에도 만났다. 서버 자체로써도 차이가 있지만, 이클립스를 쓰신다면 플러그인 자체가 상당히 차이가 있다. cvs는 일단 이클립스에서 cvs 어드민 역할을 할 수가 없다.(과거의 기억이라... 현재는 될런지도 모르겠군.) 늘쌍 checkout/checkin을 반복하는 경우라면 단축키가 요긴한데, cvs에서는 Ctrl+Alt+UCtrl+Alt+C, Ctrl+Alt+S가 안먹는다. 나로썬 이것 하나만으로도 충분한 이유다.
사용자 삽입 이미지

위쪽은 cvs의 Team 메뉴, 아래는 Subversive의 Team 메뉴

사용자 삽입 이미지














 

참고: Subversion(SVN)과 CVS의 비교
Posted by 영회
TAG CVS, svn