달력

092010  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
M1 Friday, August 21, 2009
M2 Friday, October 2
M3 Friday, November 13
M4 Friday, December 18
M5 Friday, February 5, 2010
M6 Friday, March 19
EclipseCon! March 22
M7 Friday, May 7
RC1 Friday, May 21
RC2 Friday, May 28
RC3 Friday, June 4
RC4 Friday, June 11
Release Wednesday, June 23

출처: Helios Simultaneous Release


이유는 모르겠지만, 다른 문서와 일정 차이가 조금 있다. 구체적으로 알고 싶으면 구글 카렌더를 공유한다.

Posted by 영회
1. javadoc 작성할 때 문단을 위핱 태그 삽입
  • Name: p
  • Context: javadoc
  • Description: Paragraph for javadoc
  • Pattern
 <p>
 * ${cursor}
 * </p>




Posted by 영회
Using Mylyn with Google Code - Updated for Eclipse 3.4 (Ganymede) 을 따라 해서 성공

몇 가지 주의할 사항을 메모:

1. 가니메데(JEE)에는 Mylyn Connector: Web Templates (Advanced) 가 없어서 설치해야 한다. 업데이트 URL: http://download.eclipse.org/tools/mylyn/update/incubator

2. Eclipse Outliner (Google Code)가 제공하는 Query Pattern 값에서 개행문자(\n)를 빼야 Type, Priority가 작업 목록 표시 이름에서 빠짐

3. 처음에는(default) 활성(open) 이슈 목록만 반환한다. 즉, Query Request URL 값이 아래와 같이 설정되어 있다.
${serverUrl}/csv?colspec=ID+Status+Type+Owner+Summary

쿼리 요청 URL 형식이 다음과 같아서 can 파라미터 기본(default) 값이 2라고 추측할 수 있다.

Query Request URL:
${serverUrl}/csv?can=${can}&colspec=ID+Status+Type+Owner+Summary&q=${search}

만일 마감한(closed) 이슈도 함께 보고 싶으면 Query Request URL 값에서 "can=1"로 지정해야 한다.
${serverUrl}/csv?can=1&colspec=ID+Status+Type+Owner+Summary

참조: http://alblue.blogspot.com/2009/04/google-code-and-mylyn-redux.html


Posted by 영회
벤자민의 글을 보고 돌연!

벤자민의 선택:
  • Code Assist (CTRL + Space)
  • Quick Fix (CTRL + 1)
  • Refactoring (ALT + SHIFT + T)
  • Source (ALT + SHIFT + S)
  • Surround With (ALT + SHIFT + Z)
  • Delete Rows (CTRL + D)
  • Call Hierarchy (CTRL + ALT + H)
  • Quick Type Hierarchy (CTRL + T)
  • Quick Outline (CTRL + O)
  • Show All Shortcuts (CTRL + SHIFT + L)

아래는 내 선택:
  • Code Assist (CTRL + Space)
  • Quick Fix (CTRL + 1)
  • Quick Access (CTRL + 3) [각주:1]
  • Refactoring (ALT + SHIFT + T) [각주:2]
  • Source (ALT + SHIFT + S) [각주:3]
  • Delete Rows (CTRL + D)
  • Maximize Active View or Editor (CTRL + M) [각주:4]
  • Back/Forward (ALT + LEFT/RIGHT)
  • Quick Outline (CTRL + O)
  • Open Resource (CTRL + SHIFT + R)

한국 스프링 사용자 모임 메일링에 공유했더니 다양한 노하우가 주렁주렁 달렸습니다.

특히 주목을 끄는 단축키를 모아 보면:
  • Open Task (CTRL + F12) - Mylyn
  • Open Editor Drop-Down (Ctrl + E)
  • 에디터 활성화 (F12 )

  1. 벤자민과 다른 선택을 굵게 표시 [본문으로]
  2. 빈도로 따지면 Rename... (ALT + SHIFT + R)을 압도적으로 많이 쓰지만, Refactoring 하위 메뉴를 모두 뺄 순 없네. [본문으로]
  3. getters/setters 만들 때 주로 씀. [본문으로]
  4. 순전히 노트북 사용 때문에 자주 씀. [본문으로]
Posted by 영회
일민형과 오룡해삼을 먹고 나서 소화를 시키려고 이런저런 이야기를 나누다 잠시 이클립스에 대해 이야기했다. 유로파[각주:1]에 추가한 최고의 핫키로 Ctrl+3 (Quick Access)을 꼽았다. 마치 데이터베이스에 LIKE 쿼리를, 그것도 이력 테이블을 포함한 여러 테이블에 LIKE 조회 쿼리를 날리고 결과를 UNION ALL로 붙인 후 GROUP BY 하는 듯하다. 이 핫 키를 처음 봤을 때, 이것 하나만으로도 새 버전을 써야 할 이유가 충분한 듯 보였다.

사용자 삽입 이미지

그리로 이와 비슷한 기능인 Preferences 창의 필터 필드다. 여기에 몇 자 입력하면, 광대한 이클립스 설정 옵션 중에서 원하는 녀석과 유사한 설정을 변경할 수 있는 페이지를 걸러준다.

사용자 삽입 이미지

토비형이 옆에서 3대 선호키를 말했는데, 그 중 하나가 Ctrl+Shift+R(Open Resource) 키다.  Quick Access와 필터 필드가 광활한 명령과 실행에 대한 검색을 지원한다면, Open Resources(이하 OR)는 워크 스페이스 안에 있는 광활한 파일에 대한 검색을 지원한다. 심지어 우리 프로젝트 DBA도 SQL 인스펙션을 위해 가장 많이 쓰는 단축키가 Ctrl+Shift+R일 정도로 다수 파일 중에 검색할 때는 최고의 효용성을 보여준다. 작성하는 파일이 늘어날수록 OR의 필요성은 절실해진다. 더구나 내가 짜지 않은 파일까지 자주 열람해야 한다면 곱절로 절실해진다. :)

사용자 삽입 이미지

집에 돌아오는 길에 Preferences 창에서 "쿼리를 한다."고 인식하고 있던 나를 돌아봤다. 그리고 생필품인 구글이 떠올랐다. 초창기 웹에선 "수작업 분류와 링크"로 구현한 야후의 디렉터리 서비스가 유효했다. 마찬가지로 이클립스 초기 버전에선 Preferences에서 트리를 펼치는 방식도 그리 불편하게 느껴지진 않았다. [각주:2] 그러나, 이젠 검색은 필수다. 이클립스가 제공하는 자원(명령, 뷰, 설정 옵션 등등)이 많아지면서 검색이 역시 필수인 듯하다.
  1. 가니메데에 추가한 기능인 줄 알았더니만, 시간 참 빠르다.. ㅡㅡ; [본문으로]
  2. 사실 필터 기능도 없었을 테지만... (이노무 기억력) [본문으로]
Posted by 영회
다음과 같은 코드가 있다.

score += 10 + rolls[frameIdx + 1] + rolls[frameIdx + 2];

rolls[frameIdx + 1] + rolls[frameIdx + 2] 부분을 메소드로 뽑아내고자 한다. 이클립스에서 블록 지정을 하고 Alt+Shift+M 단축키를 누르면, 다음과 같은 메시지를 만날 수 있다.

Can only extract a single expression or a set of statements.[각주:1]

두 가지 해결책이 있다. 하나는 굳이 이클립스 명령을 쓰지 않는 방법이다. 다른 방법은 블록 지정 부분을 괄호로 묶고 나서 Extract Method 명령을 수행하는 방법이다.

score += 10 + (rolls[frameIdx + 1] + rolls[frameIdx + 2]);

결코, 빠른 방법은 아니지만 몇 가지 사소한 이점이 있다.
  • 타이핑 절감
  • 오타 방지
  • 자동 줄맞춤
  • inline 리패토링하면 다시 제거 가능



  1. 젠장. 보안 툴 탓에 이미지 파일을 못 올린다. [본문으로]
Posted by 영회
이클립스 유로파로 시간을 절약하는 열 가지 기법

30 페이지 넘는 영문 튜토리얼을 스크린캐스트로 만들었네요.
  • 자바를 처음 배우거나
  • 이클립스를 처음 사용하는 분들 혹은
  • 이클립스를 쓰기는 하지만 다양한 기능은 잘 모르는 분들에게
꽤 괜찮은 가이드군요. 전체 3편으로 약 한시간이 조금 안되는 분량인데, 단순하 단축키부터 해서 템플릿 설정이나 리팩토링까지 자바 개발자 입장에서 필요한 대부분의 기능을 설명하고 있네요. 지난 6월에 3.4 버전에 해당하는 가니메데(Ganymede)가 출시했는데 어떤 구성을 담고 있는지 소개하는 글도 있군요:

한 눈에 보는 이클립스 가니메데

가니메데가 유로파에 비해 안정화 되었다는 분도 있는데, 우리 팀에는 가니메데 설치후 고생하는 분도 있더군요. 제 경우도 Software Update 사이트 목록의 경우는 좀 불안하더군요. 목록에서 선택한 사이트가 두 개씩 복제되어 나오기도 하구요. 그러나, 크게 불편한 정도는 아닙니다.

Posted by 영회
[리뷰] eBay의 이클립스, Part 1: eBay 아키텍처에 맞춘 이클립스를 보며, 나도 저렇게 해봤으면 하고 꿈꿔본 사람이라면 다음 연재를 보라.


현재 두 편의 시리즈가 번역되어 있다.

플러그인 개발 기초 학습, Part 2: 리치 클라이언트 애플리케이션 도입하기
이클립스에서 플러그인 개발은 예술과도 같은 것입니다. 플러그인 개념, 특히 OSGi와 이클립스에 대해 낯설다면, 이클립스를 사용하여 플러그인을 만들 수 있도록 제공하는 수 많은 도구를 익히는 것이 다소 어렵게 느껴질 수도 있습니다. 본 기사의 목적은 좋은 평가를 받고 있는 베스트 프랙티스와 함께 기본적인 플러그인 개발 기술을 익힐 수 있도록 하는 것입니다.

플러그인 개발 기초 학습, Part 1: 기본 요소
이클립스에서 플러그인 개발은 예술과도 같은 것입니다. 플러그인 개념, 특히 OSGi와 이클립스에 대해 낯설다면, 이클립스를 사용하여 플러그인을 만들 수 있도록 제공하는 수 많은 도구를 익히는 것이 다소 어렵게 느껴질 수도 있습니다. 본 기사의 목적은 좋은 평가를 받고 있는 베스트 프랙티스와 함께 기본적인 플러그인 개발 기술을 익힐 수 있도록 하는 것입니다.

튜토리얼처럼 따라 하면서 플러그인 개발을 해보기에는 빠진 설명이 있긴 하지만, 대략의 흐름을 보기에는 잘 요약되어 있다. 전에 리뷰했던 글과 함께 짧은 시간에 이클립스 플러그인 개발을 맛보게 해주는 좋은 기사다.

이클립스 플러그인이 OSGi에서 어떻게 동작하는지 이해하기
Posted by 영회
양석호씨 리뷰를 보고 반갑게 찾아간 글.

Eclipse V3.3의 메뉴 아이템 설정 및 추가


Eclipse의 이전 버전에서, 명령어를 메뉴, 팝업 메뉴, 툴바에 추가하는 일은 약간 어려운 일이었습니다. 하지만 Eclipse V3.3에서는 전보다 더 쉬워진 메커니즘을 도입했습니다.

원문 내용이 무엇을 다루고 있는지는 짧막한 설명에 잘 들어난다. 조만간 이클립스 플러그인 혹은 RCP 프로그램을 개발해야 하는데, 빨리 번역되기를 기대해본다.
Posted by 영회
SVN 사용은 기본적인 것이니까. CVS만을 사용해본 사람들에게는 유용한 튜토리얼이다.


일민형 권고로 subversive를 쓰고 있지만, subclipse도 쓸만했다. subclipse보다는 subversive가 이클립스 CVS 클라이언트 사용과 거의 유사해 직관성이 뛰어나다. 그리고 한번도 트러블을 겪은 기억이 없을 정도로 안정적이다. 하지만, 블로그 방문객 의견을 보면 개인차가 있는 것 같다. 여튼 SVN 클라이언트 사용방식에 큰 차이는 없다.

DW의 글은 단지 처음 사용하는 사람을 위한 것이다. 그 이상은 각자의 몫이다. ^^

아쉬운 것은 Operation을 연산으로 번역한 것이 어색하다는 점이다. 'Subversion 연산'이라니... ㅡㅡ;[각주:1]

관련 글: SVN 설치 가이드 (5/22 추가)
  1. 책 번역을 하고 있는 입장이라 고충은 이해하지만 [본문으로]
Posted by 영회
Spring을 사용하다 보면 협업 객체의 IoC 기능 활용을 위해 setter가 요구된다.
public class ArticleListController extends AbstractController{
private ArticleLinkDao articleLinkDao;

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
...
}

public void setArticleLinkDao(ArticleLinkDao articleLinkDao) {
this.articleLinkDao = articleLinkDao;
}
}

그런데 이러한 클래스가 또 만들어야 한다고 가정해보자. 중복이 발생한다.
public class ThemePageController extends AbstractController{
private ArticleLinkDao articleLinkDao;

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
...
}

public void setArticleLinkDao(ArticleLinkDao articleLinkDao) {
this.articleLinkDao = articleLinkDao;
}
}

중복을 막기 위해서 BaseController를 만들어 이들을 상속하게 하자.

1. AbstractController -> BaseController로 변경
public class ArticleListController extends BaseController{
private ArticleLinkDao articleLinkDao;

@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
...
}

public void setArticleLinkDao(ArticleLinkDao articleLinkDao) {
this.articleLinkDao = articleLinkDao;
}
}

2. 빠른 수정(Quick fix)으로 BaseController 생성


BaseController가 AbstractController를 상속해야 함을 잊지 말자.

3. Refactor > Pull up... 메뉴 선택


상위 클래스로 올릴 속성과 메소드를 선택한 후에 Finish 혹은 Next를 눌러서 미리보기를 하고 Finish.
리팩토링을 하고 나면 기분까지 개운(?)해진다. ^^;

4. BaseController 변경
public abstract class BaseController extends AbstractController {
protected ArticleLinkDao articleLinkDao;
@Override
abstract protected ModelAndView handleRequestInternal(HttpServletRequest request,
  HttpServletResponse response) throws Exception;
public void setArticleLinkDao(ArticleLinkDao articleLinkDao) {
this.articleLinkDao = articleLinkDao;
}
}

BaseController를 abstract로 만들어 반드시 handleRequestInternal을 구현하게 하고, 매개변수 이름을 request, response과 같이 보다 의미있게 바꿔주는 센스를 발휘하면, 마법사 혹은 빠른 수정으로 상속 객체를 생성할 때 이를 그대로 사용하게 된다. ^^
Posted by 영회