[devtool] IntelliJ: Live Templates

참고 문서

테스트 환경 정보

  • IntelliJ IDEA 2021.3

개요

인텔리제이의 라이브 템플릿 소개와 맴대로 추가/수정하는 방법 설명.

라이브 템플릿이란

인텔리제이의 자동 완성은 요래요래 분류되는데:

  • Code Completion
  • Postfix Completion
  • File and Code Templates
  • Live Templates

이 중 라이브 템플릿은 특정 키워드를 입력한 후 발동 키를 누르면 미리 정해진 설정에 맞춰 코드가 완성되는 기능이다. 이클립스의 Content Assist와 동일함.

윈도우 OS일 때 라이브 템플릿의 단축키는 ctrl + space이며 그 다음 (필요하면 방향키로 이동해서) enter 혹은 tab으로 선택한다.

여기까지는 누가 알려주지 않아도 아는 내용이쥬?

템플릿 커스터마이징

필요한 템플릿을 마음대로 추가/수정하는 방법을 알아보자.

환경 설정 경로: Settingsctrl + alt + s > Editor > Live Templates

각 번호별 설명:

  1. 템플릿이 활성화될 언어
  2. 새 템플릿 추가 버튼
  3. 축약어(Abbreviation): 축약어나 자동 완성 키워드를 입력하는 곳. 축약어를 지정하고 싶을 땐 자동 완성 키워드 앞에 온점.과 대문자 몇 개를 입력한다. 예를 들어 EHF. enhanced for-loop라고 입력해 저장하고 Surround Withctrl + alt + t 기능을 활성화 하면 E, H, F 중 기존의 라이브 템플릿과 겹치지 않는 하나가 단축키로 지정된다.
  4. 라이브 템플릿 선택 창에서 설명으로 표시되는 텍스트(비워도 됨)
  5. 변수를 사용할 때 해당 변수가 어떻게 작동해야 하는지 정의하는 메뉴. 위 스샷에선 작성한 변수가 없어서 비활성화되어 있음.
  6. 이 템플릿이 문맥상 어느 위치에서 활성화 되는지 선택

변수가 뭔디

변수에는 인텔리제이가 알아서 적절한 값으로 채워줄 내용을 정의한다.

예를 들어 축약어 foriTemplate text가 요렇게 생겼다:

for(int $INDEX$ = 0; $INDEX$ < $LIMIT$; $INDEX$++) {
  $END$
}

그리고 Edit variables를 눌러보면:

이렇게 돼 있는데 Name 열에선 변수의 이름을, Expression 열에선 해당 변수가 어떤 값으로 채워져야 하는지를 결정한다.

이 경우 $INDEX$ 자리는 적절한 인덱스 변수명(i, j, k, …)으로 채워지고 Expression이 비어있는 $LIMIT$ 자리는 아무것도 채워지지 않는다. (대신 탭 포커싱이 됨)

변수의 이름은 사전에 정의된 변수 두 가지를 제외하고 아무렇게나 지어도 된다.

사전 정의 변수

  • $END$: 코드 자동 완성 후 캐럿이 위치할 자리를 지정
  • $SELECTION$: 특정 코드를 선택(드래그)한 뒤 Surround Withctrl + alt + t로 라이브 템플릿을 선택하면 $SELECTION$ 자리에 선택했던 코드가 자동으로 입력됨

설정 예시

logger

클래스 변수 logger를 자동으로 완성해 주는 템플릿이다.

Abbreviationlogger로, Template Text는 아래처럼 작성한다:

private static final Logger logger = LoggerFactory.getLogger($className$.class);

그 다음 $className$ 변수의 값은 className()으로, 적용 범위는 declaration으로 선택한다.

  • className(): 문맥 상 현재 클래스의 이름을 채워넣는다.
  • declaration: 이 템플릿이 클래스나 메서드의 선언부에서만 활성화된다.

logger.info

자주 사용하게 될 로그 출력용 템플릿.

Abbreviationli로, Template Text는 아래처럼 작성한다:

logger.info("{}", $aaa$);

$aaa$변수의 값은 completeSmart(), 적용 범위는 expression을 선택한다.

  • completeSmart(): 자동 완성 후 문맥에 맞는 변수 선택 툴팁을 띄우게 함.
  • expression: 이 템플릿이 메서드 바디에서 표현식을 작성할 수 있는 지역일 때만 활성화 됨.

logger.error

try-catchcatch에서 에러 메시지 출력 템플릿.

Abbreviationle로, Template Text는 아래처럼 작성한다:

logger.error($var$.getMessage(), $var$);

$var$ 변수의 값은 variableOfType("Exception"), 적용 범위는 expression을 선택한다.

  • variableOfType("Exception"): 문맥에 맞는 Exception의 서브 타입 변수를 채워 넣는다.

변수의 Expression들이 어떻게 작동하는 지는 공식 가이드를 볼 것.

-끝-