PhpStorm 2021.2의 새로운 기능

PhpStorm 2021.2는 주요 업데이트 버전으로 PHP의 제네릭, PHP 8.1의 열거형, 한 줄 array shape 어노테이션, 개선된 PHP 코드 자동 서식 지정, 새로운 검사 및 리팩터링 등을 도입했습니다.

PHP의 제네릭

PHP는 현재, 언어 수준에서 제네릭에 대한 지원을 제공하지 않지만 어노테이션을 통한 제네릭 사용은 이미 널리 보급되었습니다. 이러한 제네릭은 컬렉션, 컨테이너, 팩토리 및 기타 애플리케이션으로 작업할 때 코드를 더 안전하고 예측 가능하게 만듭니다.

PHP의 제네릭

@template 어노테이션을 통해 제네릭에 대한 지원을 추가했습니다. 그 결과, 제안에 예상 유형의 요소가 포함되기 때문에 많은 경우에 컬렉션 작업이 더 간단해집니다.

팩토리 패턴의 경우, 이제 class-string<T> 어노테이션을 사용할 수 있으며 더 나은 코드 완성을 얻을 수 있습니다.

제네릭에 대한 이 예비 지원은 완전하지 않으며 알려진 제한 사항이 있습니다. 이 블로그 게시물에서 관련 내용을 자세히 알아볼 수 있습니다.

PHP 8.1 열거형

PHP 인터프리터의 새로운 8.1 버전은 2021년 말에 출시될 예정입니다. 하지만 늘 그렇듯이 JetBrains는 지원을 일찍 시작하려고 합니다.

PHP 8.1 릴리스에서 가장 기대되는 기능 중 하나는 열거형입니다.

PhpStorm 2021.2를 사용하면 즉시 열거형 사용을 시작할 수 있습니다. IDE는 코드 제안 및 유효성 검사를 제공하여 코드를 잘못 사용하지 않도록 보호합니다.

PHP의 열거형은 일련의 case를 포함하고 메서드를 가질 수 있으며 타입 힌트로 사용할 수 있습니다. 이러한 모든 경우에 PhpStorm은 오류 강조 표시와 적절한 제안을 제공하여 시간을 절약할 수 있게 해줍니다.

Backed Enums

열거형 case는 이에 상응하는 scalar를 가질 수 있으며, 이는 열거형을 데이터 저장소에 저장해야 하는 경우에 유용합니다. 이러한 열거형을 Backed Enum이라고 합니다.

빠른 수정을 통해 Backed Enum에 scalar 타입 선언을 추가할 수 있습니다.

열거형은 조건 및 match 표현식과 같은 다른 기능과도 잘 작동합니다.

자세히 알아보기

Array shape

Array shape

코드에 객체와 유사한 배열이 있는 경우, 이제 array{key: type, key: type, ...}의 PHPDoc 어노테이션으로 해당 구조를 정의할 수 있습니다.

PhpStorm은 이러한 어노테이션이 추가된 배열에 대한 코드 완성을 제공하여 일상적인 입력에 소요되는 시간을 줄이고 실수를 방지합니다.

이 지원은 한 줄 array shape 정의로 제한됩니다. 더 큰 구조의 경우, 실제 객체와 클래스를 사용하는 것이 더 나은 경우가 많습니다.

Extract Method 리팩터링 개선

가장 자주 사용되는 PhpStorm 리팩터링 중 하나인 Extract Method(메서드 추출)이 개선되었습니다.

큰 메서드를 더 작은 단위로 분할할 수 있으며 중복 코드도 제거합니다.

이 리팩터링을 사용하려면 코드를 선택하고 ⌘⌥M(Cmd+Alt+M/Ctrl+Alt+M)을 누르세요.

중복 코드 리팩터링

PhpStorm에는 Duplicated code fragment(중복된 코드 조각) 검사 기능이 있습니다. 이 기능은 매우 유사한 코드 청크를 강조 표시합니다. 최종 결과가 동일하기만 하면 서식 지정, 변수 이름 및 구문 순서는 다를 수 있습니다.

이 검사는 중복된 조각의 첫 번째 줄을 강조 표시합니다. 이제 강조 표시된 줄에서 Alt+Enter를 누르고 중복 코드 빠른 수정에서 Extract Method(메서드 추출) 리팩터링을 호출하여 이러한 코드를 빠르게 리팩터링할 수 있습니다.

PhpStorm은 리팩터링 중에 현재 범위(메서드, 클래스 또는 파일)에서 더 작은 코드 조각의 중복도 찾을 수 있습니다. 코드 조각을 선택한 다음 ⌘⌥M(Cmd+Alt+M/Ctrl+Alt+M)으로 리팩터링을 호출합니다. 그러면 대화상자 하단에 Review and replace duplicates(중복 항목 검토 및 바꾸기) 체크박스가 표시됩니다.

코드 조각을 위한 새로운 스마트 선택자

코드 조각을 위한 새로운 스마트 선택자

코드를 선택하지 않고 Extract Method(메서드 추출) 리팩터링을 호출할 수도 있습니다. 이 경우 PhpStorm은 가능한 코드 조각 목록을 제안합니다. 제안 사항은 필터링되며 리팩터링이 합리적으로 필요한 세그먼트만 포함됩니다.

선택 영역 확장에 대한 개선

Expand/Shrink selection(선택 영역 확장/축소) 액션 ⌥+Up/⌥+Down(Ctrl+W / Ctrl+Shift+W)으로 코드 조각을 선택할 수 있다는 사실은 이미 알고 계실 것으로 생각합니다. 이것은 리팩터링할 코드를 선택하는 가장 빠른 방법 중 하나입니다.

이번 릴리스에는 중괄호 없이 블록을 선택할 수 있는, 작지만 유용한 업데이트가 도입되었습니다.

Extract Method(메서드 추출) 리팩터링이 더욱 개선되었습니다! 자세한 내용은 이 블로그 게시물에서 확인하세요.

검사 및 빠른 수정

새 릴리스가 나올 때면 항상 버그를 찾고 수정하는 데 소비되는 시간을 줄이기 위해 많은 검사가 제공됩니다. 수정 사항을 적용하려면 PhpStorm의 강조 표시된 코드에서 Alt+Enter를 누릅니다.

'?->'로 바꿀수 있는 조건

'?->'로 바꿀수 있는 조건

Null에 대한 불필요한 검사를 PHP 8의 새로운 안전 연산자로 대체합니다. Alt+Enter를 눌러 변환을 수행하세요.

상수가 정의된 클래스에서 해당 상수 사용

상수가 정의된 클래스에서 해당 상수 사용

PhpStorm은 상수가 정의된 엔티티 대신 하위 클래스 또는 하위 인터페이스를 통해 액세스하는 상수를 강조 표시합니다. 엔티티 이름을 Alt+Enter 빠른 수정을 사용하여 상수가 정의된 이름으로 바꿉니다.

논리식의 중복 조건

논리식의 중복 조건

PhpStorm은 중복이 있는지 확인하기 위해 이제 조건의 각 부분을 평가합니다. 이 기능은 검사가 명확하지 않고 단순히 보는 것만으로 어디에 중복이 있는지 알 수 없는 경우에 유용할 수 있습니다.

가능한 리팩터링 검사

PHP의 Settings(설정)/Preferences(환경 설정) | Editor(에디터) | Inspections(검사) 섹션에 새로운 검사 그룹을 추가했습니다.

이 그룹에는 리팩터링에 적합한 대상을 식별하는 데 도움이 될 수 있는 검사가 포함됩니다. 이러한 검사는 기본적으로 비활성화되어 있지만 이 비활성화된 상태에서도 탐지되는 코드 근처에 추가 여백 아이콘 이 표시됩니다(에디터에서 밑줄을 긋는 대신).

여백 아이콘을 클릭하면 제안된 리팩터링이 호출됩니다.

이러한 검사는 순환 복잡도, 중첩 깊이, 사용된 변수의 수, 총 라인 수 등 다양한 코드 품질 메트릭으로 구성되어 있습니다.

각 검사에 대한 설명에서 사용된 측정 기준 목록을 확인할 수 있습니다.

자세히 알아보기

IDE

커밋 전 테스트 실행

커밋 전 테스트 실행

테스트를 실행할 수 있는 기능과 함께 가능한 커밋 전 액션의 목록을 확장했습니다. Run Tests(테스트 실행) 체크박스를 선택하고 실행할 구성을 선택하세요. 이 작업은 코드를 VCS에 저장하기 전에 확인하는 데 유용합니다.

또한, Analyze code(코드 분석)Cleanup(정리) 옵션 옆에 있는 Choose profile(프로파일 선택)을 클릭하여 이러한 옵션을 사용자 지정할 수 있습니다.

저장 시 액션

저장 시 액션

Preferences(환경 설정)/Settings(설정) | Tools(도구) | Actions on Save(저장 시 액션)에 새로운 구성 페이지를 추가했습니다.

여기에서 Ctrl+S 또는 묵시적 자동 저장으로 트리거 가능한 작업 목록이 표시됩니다. 이러한 액션에는 코드 검사, 서식 재지정, 코드 정리, 배포 등이 포함됩니다.

통합된 Diff 표시

통합된 Diff 표시

PhpStorm은 사용자가 Show Diff(Diff 표시) 액션을 어디에서 호출하든 관계없이 기본적으로 초기 파일 및 변경된 파일 간의 차이점을 표시합니다. 별도의 창에서 변경 사항을 추적하는 것이 더 편리하다면, 간단히 에디터에서 원하는 파일을 끌어다 놓으세요.

로컬 기록 리비전 내 텍스트 검색

로컬 기록 리비전 내 텍스트 검색

Local History(로컬 기록)은 많은 개발자들에게 알려지지 않은 영웅이었고, 이제 Local History(로컬 기록) 대화상자의 검색 필드를 사용하여 로컬 리비전에서 필요한 텍스트를 빠르게 찾을 수 있도록 개선되었습니다.

로컬 기록 리비전 내 텍스트 검색

GPG 서명

PhpStorm 2021.2에서는 커밋을 보호하기 위한 새로운 방법을 제공합니다. 이제 GPG에서 Git 커밋 서명을 사용할 수 있습니다. Settings(설정) | Version Control(버전 관리) | Git으로 이동한 다음, 드롭다운 목록에서 Configure GPG Key(GPG 키 구성) 버튼을 누르면 됩니다.

UI 현지화

한국어, 중국어, 일본어로 UI 현지화

이번 버전부터 WebStorm UI가 한국어, 중국어일본어로 완전히 현지화되어 보다 편리하게 사용할 수 있습니다. 현지화된 UI는 번들로 포함되지 않은 언어 팩 플러그인으로 제공되며, IDE에 쉽게 설치할 수 있습니다*. 이미 150만 명이 넘는 사용자가 부분적으로 현지화된 EAP 언어 팩 버전을 사용하기 시작했습니다. 이제 완전히 현지화된 환경을 이용해보세요!

웹 기술

WebStorm 2021.2모든 새로운 기능 및 개선 사항은 PhpStorm 2021.2에서도 바로 사용할 수 있거나 Plugin Marketplace에서 제공되는 무료 플러그인을 통해 사용할 수 있습니다.

React useState 훅에 대한 이름 변경 리팩터링

React useState 훅에 대한 이름 변경 리팩터링

PhpStorm은 이제 useState의 값과 함수의 이름을 변경할 수 있습니다. state 값에 캐럿을 놓고 ⇧F6/Shift+F6을 누르거나 컨텍스트 메뉴를 마우스 오른쪽 버튼으로 클릭한 후 Refactor(리팩터링) | Rename(이름 변경)으로 이동하세요.

require()에 대한 자동 import 문

require()에 대한 자동 import 문

이제 PhpStorm은 CommonJS 모듈로 작업하면서 코드 완성을 사용할 때 누락된 import 문을 추가할 수 있습니다.

데이터베이스 도구

DataGrip 2021.2의 새로운 기능을 살펴보세요. 이 모든 기능이 PhpStorm에도 제공됩니다. 다음은 그 중 몇가지입니다.

DDL 데이터 소스

DDL 데이터 소스

이제 실제 파일을 기반으로 DDL 데이터 소스를 생성할 수 있습니다. DDL 파일은 디스크에 생성되며 새 데이터 소스는 그 파일을 기반으로 합니다. 이러한 방식으로 언제든지 파일을 재생성하고 DDL 데이터 소스를 새로 고칠 수 있습니다.

MongoDB에 대한 필드 및 연산자 코드 완성

MongoDB에 대한 필드 및 연산자 코드 완성

이제 MongoDB 콘솔에 코드 완성이 구현되었습니다.

기타 개선 사항

PhpStorm 2021.2에는 많은 추가 개선 사항과 기능 강화가 이루어졌으며 다음은 그 일부입니다.

  • PhpStorm에서 기본 제공하는 웹 서버를 사용하여 브라우저에서 HTML 및 PHP 파일 미리보기를 할 수 있습니다. PhpStorm은 이제 자동으로 저장 시 열린 페이지를 다시 로드할 수 있습니다.
  • 이제 도구 창을 재구성하기가 더욱 쉬워졌습니다. 이동하려는 도구 창 위로 마우스를 가져간 다음 원하는 위치로 끌어다 놓으세요.
  • PhpStorm은 마지막 업데이트 후 180일이 지난 캐시와 디렉터리를 자동으로 정리합니다. Help(도움말) | Delete Leftover IDE Directories(남은 IDE 디렉터리 삭제)를 통해 수동으로 정리할 수도 있습니다.
  • 커서 모양을 설정하고 Option을 메타 키로 사용하기 위한 새로운 터미널 옵션이 추가되었습니다.
  • PhpStorm을 미세 조정하는 옵션을 제공하는 새로운 Advanced settings(고급 설정) 페이지가 Preferences(환경 설정)에 추가되었습니다.
  • 대용량 파일 모음에 대한 FTP 업로드 속도가 크게 향상되었습니다.
  • dirname()의 levels 매개변수에 대한 지원이 추가되었습니다.
  • PHP 코드 서식 지정과 관련된 모든 미해결 문제를 해결했습니다.