자바 리팩토링 및 소스 액션
Visual Studio Code는 소스 코드를 리팩토링할 수 있는 다양한 옵션과 코드를 생성하고 문제를 해결할 수 있는 소스 액션을 제공합니다. 이를 사용하려면 전구
💡를 클릭하세요. 또는 편집기 화면에서 마우스 오른쪽 버튼을 클 릭하고 Source Action... 을 선택하세요.
지원되는 코드 액션 목록
- 리팩토링
- 변수에 할당
- 익명 클래스를 중첩 클래스로 변환
- 익명 클래스 생성으로 변환
- 향상된 for 루프로 변환
- 람다 표현식으로 변환
- 정적 import로 변환
- 추출 리팩토링
- 인라인 리팩토링
- 불리언 반전
- 이동
- 이름 변경
- 타입 변경
- 소스 액션
- 지원되는 기타 코드 액션
리팩토링
자바 프로그램 리팩토링의 목표는 프로그램의 동작에 영향을 주지 않으면서 시스템 전반에 걸쳐 코드 변경을 수행하는 것입니다. VS Code의 자바 언어 지원은 쉽게 접근할 수 있는 많은 리팩토링 옵션을 제공합니다.
리팩토링 호출
리팩토링 명령은 편집기의 컨텍스트 메뉴에서 사용할 수 있습니다. 리팩토링할 요소를 선택하고 마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴를 열고 **리팩토링...**을 선택하세요:
그러면 사용 가능한 모든 리팩토링 옵션이 표시됩니다.
변수에 할당
표현식을 로컬 변수 또는 필드에 할당합니다.
예제
이전
Arrays.asList("apple", "lemon", "banana");
이후
List<String> fruits = Arrays.asList("apple", "lemon", "banana");
생성자에서 사용되지 않는 매개변수를 새 필드에 할당하는 데에도 사용할 수 있습니다.
익명 클래스를 중첩 클래스로 변환
익명 내부 클래스를 멤버 클래스로 변환합니다.
예제
익명 클래스 Interface(){...}
를 클래스 Clazz
의 멤버로 변환해 보겠습니다.
이전
public class Clazz {
public Interface method() {
final boolean isValid = true;
return new Interface() {
public boolean isValid() {
return isValid;
}
};
}
}
이후
public class Clazz {
private final class MyInterface extends Interface {
private final boolean isValid;
private MyInterface(boolean isValid) {
this.isValid = isValid;
}
public boolean isValid() {
return isValid;
}
}
public Interface method() {
final boolean isValid = true;
return new MyInterface(isValid);
}
}
익명 클래스 생성으로 변환
람다 표현식을 익명 클래스 생성으로 변환합니다.
예제
변수 runnable
에 람다 표현식이 할당되어 있습니다. 이를 익명 클래스 생성으로 변환해 보겠습니다.
이전
public void method() {
Runnable runnable = () -> {
// 무언가를 수행
};
}
이후
public void method() {
Runnable runnable = new Runnable() {
@Override
public void run() {
// 무언가를 수행
}
};
}
추가 참고: 람다 표현식으로 변환
향상된 for 루프로 변환
단순 for
루프를 for-each
스타일로 변환합니다.
예제
이전
public void order(String[] books) {
for (int i = 0; i < books.length; i++) {
// 무언가를 수행
}
}
이후
public void order(String[] books) {
for (String book : books) {
// 무언가를 수행
}
}
람다 표현식으로 변환
익명 클래스 생성을 람다 표현식으로 변환합니다.
예제
익명 클래스 Runnable(){...}
를 람다 표현식으로 변환해 보겠습니다.
이전
public void method() {
Runnable runnable = new Runnable(){
@Override
public void run() {
// 무언가를 수행
}
};
}