편집을 위한 Quick assists

편집을 위한 Quick assists (Quick assists for editing)

지역화된 리팩터링을 사용해서 생산성을 높이는 방법을 알아볼게요.

출처: 원문

본문

코딩하는 동안 반복적인 작업을 수행하느라 너무 많은 시간을 보내시나요? 그렇다면 좋은 소식이 있어요. 반복적인 작업 중 상당수는 우리가 quick assist라고 부르는 기능을 사용해 자동으로 수행할 수 있어요.

quick assist는 코드에 일반적인 변경을 가하는 것을 목표로 하는 자동화된 편집이에요. 'Quick fixes for analysis issues'와 'Bulk application of fixes'에서 살펴본 quick fix와 달리, quick assist가 있다는 것은 코드를 바꿔야 한다는 제안이 아니에요. 그저 여러분의 작업을 더 쉽게 만들어 줄 뿐이에요.

예시를 몇 가지 살펴볼게요.

지역 변수 선언하기

여러분은 지역 변수를 선언하고 초기화하는 데 꽤 많은 시간을 보낼 가능성이 높아요. 도구들이 그 중 일부를 도와줄 수 있어요. 초기화 표현식(initializer expression)을 입력하면 quick assist를 사용해 그 표현식의 값을 담을 지역 변수를 만들 수 있어요.

아래 코드로 시작해서 커서를 표현식 아무 곳에나 놓으면, 편집기 왼쪽 가장자리 근처에 전구 아이콘이 나타나요. 그 위에 마우스를 올리고 클릭하면 사용 가능한 quick assist가 들어 있는 메뉴가 열려요.

Visual Studio Code에서 지역 변수 추출을 위한 quick assist 메뉴를 보여주는 모습.

IntelliJ IDEA에서 지역 변수 추출을 위한 quick assist 메뉴를 보여주는 모습.

Visual Studio Code와 IntelliJ IDEA 모두 해당 assist를 선택하면 표현식을 이니셜라이저로 사용하는 변수 선언이 삽입되고 변수 이름이 선택되어, 제안된 이름 중 하나를 고르거나 직접 이름을 입력할 수 있어요.

엔터/리턴 키를 누르면 입력한 이름이 적용돼요.

함수 본문 스타일

표현식 본문(expression body) 함수를 자주 사용한다면, 어느 시점엔가 그것을 블록 본문(block body) 함수로 변환해야 했을 가능성이 높아요. 그것을 위한 assist도 있어요. 예를 들어 다음과 같은 코드가 있고 커서를 화살표 안에 놓으면 다음 옵션들이 보여요.

Visual Studio Code에서 표현식 본문을 블록 본문으로 변환하는 quick assist를 보여주는 모습.

IntelliJ IDEA에서 표현식 본문을 블록 본문으로 변환하는 quick assist를 보여주는 모습.

"블록 본문으로 변환(Convert to block body)"을 선택하면 함수 본문이 이런 모양으로 다시 작성돼요.

그리고 네, 블록 본문에서 표현식 본문으로 변환해 주는 assist도 따로 있어요.

if 문 다시 작성하기

assist는 더 큰 재구조화도 도와줄 수 있어요. 다음과 같이 구조화된 코드를 작성해 본 적이 있나요?

void f(int a, int b, int c, int d) {
  if (a == b) {
    if (a == c || a == d) {
      print(0);
    }
  }
}

그리고 두 조건을 합칠 수 있다는 걸 깨달았다면, 그것을 위한 assist가 있어요. 커서를 안쪽 if에 놓고 메뉴를 여세요.

"바깥쪽 'if' 문과 결합(Join 'if' statement with outer 'if' statement)"을 선택하면 코드가 이런 모양으로 다시 작성돼요.

void f(int a, int b, int c, int d) {
  if (a == b && (a == c || a == d)) {
    print(0);
  }
}

커서를 바깥쪽 if에 놓아도 assist가 나타나는데, 그때 메뉴는 "안쪽 'if' 문과 결합(Join 'if' statement with inner 'if' statement)"이라고 읽혀요.

더 새로운 언어 기능 사용하기

더 새로운 언어 기능으로 전환하도록 도와주는 assist도 있어요. 예를 들어 이런 클래스가 있다면,

class A {
  A({int? x, int? y});
}

class B extends A {
  B({int? x, int? y}) : super(x: x, y: y);
}

하위 클래스의 생성자가 일부 매개변수를 수정하지 않고 상위 클래스로 전달하는 경우, 코드를 더 깔끔하게 작성할 방법이 있어요. 커서를 생성자 B의 이름에 놓고 메뉴를 여세요.

"super 매개변수를 사용하도록 변환(Convert to using super parameters)"을 선택하면 코드가 이런 모양으로 다시 작성돼요.

한 글에서 다룰 수 있는 것보다 더 많은 assist가 있어요. 다음에 항상 하던 편집을 하기 직전이라면, 컨텍스트 액션(context actions)을 확인해서 작업을 더 쉽게 만들어 줄 assist가 있는지 살펴보세요.

더 알아보기