PhpStorm 2021.3의 새로운 기능

PhpStorm 2021.3은 주요 업데이트 버전으로 최근 출시된 PHP 8.1 지원, 향상된 PHP 제네릭 처리, 배포, HTTP 클라이언트 및 VCS 통합에 대한 개선 사항을 도입했습니다.

PHP 8.1

새로운 버전의 인터프리터가 출시되었습니다! Brent Roose 및 커뮤니티 구성원의 동영상에서 모든 신규 언어 기능을 간략하게 살펴보세요.

열거형

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

PhpStorm 2021.2에서는 열거형 지원이 추가되어, 열거형을 잘못 사용하는 경우를 방지하는 코드 제안 및 유효성 검사를 제공했습니다.

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

Readonly 프로퍼티

Readonly properties are the properties that cannot be changed after initialization, that is, after a value is assigned to them.

PhpStorm 2021.3은 사용자가 코드에서 readonly 프로퍼티를 올바르게 사용할 수 있도록 지원합니다.

전용 검사에서는 readonly 프로퍼티가 선언되어 있는 범위(프로퍼티 선언 자체 또는 클래스 메서드 내)와 초기화되는 범위가 일치하는지 확인합니다.

또 readonly 프로퍼티는 항상 타입이 지정되어야 하므로, PhpStorm은 타입이 명확히 선언되었는지 확인합니다.

readonly 프로퍼티는 디폴트 값을 가질 수 없지만 승격된 프로퍼티로서 생성자에서 초기화는 가능하므로, PhpStorm은 이와 관련한 빠른 수정을 제공합니다.

이니셜라이저의 'new' 연산자

PHP 8.1에서는 디폴트 매개변수 값, 정적 변수, 전역 상수 및 속성 인수를 초기화할 경우 새로운 표현식을 사용할 수 있습니다.

PhpStorm은 이러한 사용 위치를 확인하여, 부적절한 경우(예: 새 객체를 클래스 상수 또는 프로퍼티로서 제공하는 경우)를 강조 표시합니다.

일급 호출 가능 구문

PHP 8.1에서 일급 호출 가능 구문을 통해 모든 함수에 대한 참조를 얻을 수 있습니다. 이제 $fn = Closure::fromCallable('strlen');을 작성하는 대신 더 짧은 $fn = strlen(...); 형식을 사용할 수 있으며, PhpStorm에서 제공하는 Alt+Enter 빠른 수정을 통해 코드를 새 구문으로 변환할 수 있습니다.

순수 교차 타입

PHP 8.1에는 값이 1개의 타입 제약 조건이 아닌 여러 개의 타입 제약 조건을 충족해야 하는 교차 타입이 추가되었습니다.

이제 PhpStorm은 이러한 구문에 코드 완성 기능을 제공하고, 교차 타입이 공용체 타입과 결합되지 않았는지 확인합니다. 또한 PHPDoc 어노테이션으로 지정된 교차 타입이 있는 경우 PhpStorm은 이 역시 올바르게 해석합니다.

새로운 반환 타입: 'never'

PHP 8.1에서 반환 값의 타입으로 never가 추가되었습니다. 함수가 never 타입으로 선언되면, 값을 반환하지 않으며 예외를 던지거나 스크립트의 실행을 종료합니다(die(), exit() 또는 trigger_error() 함수와 동일하게 작동).

final 상수

PHP 8.1에서는 final 클래스 상수가 하위 클래스에서 재정의되지 않도록 선언할 수 있으며, PhpStorm은 그러한 사례의 유효성을 검사합니다.

중단된 기능

신규 기능이 추가된 것 외에도 PHP 8.1을 더욱 일관성 있고 사용하기 쉬운 언어로 만들기 위해 일부 기능은 지원 중단되었습니다. PhpStorm은 이처럼 지원 중단된 코드를 찾을 수 있도록 도와줍니다. 다음은 몇 가지 예시입니다.

Serializable 인터페이스의 사용 지원 중단

Serializable 인터페이스 대신 __serialize()__unserialize() 매직 메서드를 사용하는 것이 좋습니다. 아직은 PHP 8.1에서 Serializable을 사용할 수 있으나, 구현 클래스에 __serialize()__unserialize()가 모두 사용된 경우에만 가능합니다. PhpStorm 2021.3은 잘못된 코드를 강조 표시하고, Alt+Enter 빠른 수정을 제공하여 매직 메서드를 추가합니다.

GLOBALS 사용 제한

PHP 8.1에서 $GLOBALS 슈퍼 전역 변수의 사용이 제한됩니다. $GLOBALS 전체에서 쓰기 또는 읽기/쓰기 작업을 수행할 수 없습니다. PhpStorm은 이처럼 문제가 있는 사용 위치를 강조 표시합니다.

PHP의 제네릭

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

Doctrine Collection 지원 개선 사항

PhpStorm에서 IteratorAggregate 인터페이스가 지원되며, Doctrine Collection의 반복 처리를 별도 설정 없이 바로 사용할 수 있습니다.

Laravel 컬렉션 지원

In the upcoming Laravel release, the illuminate/collections package will support generics annotations. PhpStorm 2021.3은 해당 컬렉션에 향상된 코드 완성 기능을 제공합니다.

생성자에서 제네릭 타입 추론

생성자에 제네릭 @template 매개변수가 있고, 객체를 인수로 전달하여 타입을 지정하려는 경우 PhpStorm은 올바른 타입을 추론하여 코드 완성 기능을 제공합니다.

리팩터링

드래그앤드롭으로 클래스 이동

이전에는 클래스를 옮기고 관련 네임스페이스를 업데이트하려면 코드 에디터에서 Move(이동) 리팩터링(F6)을 사용하는 방법밖에 없었습니다. PhpStorm 2021.3에서는 해당 리팩터링 대신 Project(프로젝트) 뷰에서 드래그앤드롭을 사용할 수 있습니다. 이 방식을 사용하면 작업 중에 프로젝트 구조를 확인하고, 여러 클래스 또는 전체 폴더를 옮길 수 있습니다. PhpStorm은 그에 따라 모든 참조를 적절히 업데이트합니다.

함수 또는 메서드 인라인화

Inline Method(메서드 인라인화) 리팩터링을 사용하면 메서드 호출을 메서드 내용으로 바꾸고 메서드 자체는 삭제할 수 있습니다. PhpStorm 2021.3에서 리팩터링과 관련한 여러 개선 사항이 있으며 앞으로 더 많은 개선이 이루어질 예정입니다. 일례로, 이제 비 static 메서드, 메서드 체인, 매개변수로서 전달된 화살표/익명 함수가 지원됩니다.

이 리팩터링을 사용하려면 캐럿을 메서드에 놓고 Ctrl+Alt+N을 누르면 됩니다. 코드에서 한 번만 사용된 private 메서드가 있는 경우 Alt+Enter를 누른 후 새로운 Inline Method 빠른 수정을 사용해 보세요.

인라인 변수

Inline Variable(변수 인라인화) 리팩터링을 사용하면 변수에 대한 참조를 실제 변수 값으로 바꿀 수 있습니다. PhpStorm 2021.3에서 이 리팩터링은 NOWDOC/HEREDOC 변수의 인라인화를 지원하며, 사용 편의성도 일부 개선되었습니다.

또한 PhpStorm은 한 번만 사용된 변수를 탐지하여 적용 가능한 Inline Variable 빠른 수정(Alt+Enter)을 제공합니다.

배포

rsync 지원

배포 시 SFTP 서버를 사용할 경우, 파일과 폴더의 업로드 및 다운로드를 위해 rsync를 활성화하여 전송 속도를 대폭 개선할 수 있습니다. Use rsync for download/upload(다운로드/업로드에 rsync 사용) 옵션은 배포 서버 구성의 Advanced(고급) 섹션에서 찾을 수 있습니다.

rsync 실행 파일 경로는 Settings(설정)/Preferences(환경 설정) | Tools(도구) | Rsync에서 구성 가능합니다. macOS 및 Linux에서는 rsync를 바로 사용할 수 있습니다. For Windows, it is recommended to use Cygwin and OpenSSH.

업로드하지 못한 파일 재전송

PhpStorm 2021.3을 사용하면 업로드하지 못한 파일을 다시 전송할 수 있습니다. File Transfer(파일 전송) 도구 창에서 Retry(재시도) 링크를 클릭하세요.

SSH 연결에 대한 프록시 지원

이제 Settings(설정)/Preferences(환경 설정) | Tools(도구) | SSH Configurations(SSH 구성)에서 SSH 구성을 위한 HTTP 또는 SOCKS 프록시 서버를 지정할 수 있습니다.

IDE 전체 프록시를 사용할 수도 있습니다. Use global IDE proxy settings(IDE 전체 프록시 설정 사용) 체크박스를 활성화하고 Settings(설정)/Preferences(환경 설정) | Appearance & Behavior(모양 및 동작) | System Settings(시스템 설정) | HTTP Proxy(HTTP 프록시)에서 프록시 세부 정보를 제공하면 됩니다.

프로젝트 디폴트 서버를 빠르게 전환

PhpStorm 2021.3은 현재 디폴트 서버가 표시된 상태 표시줄 위젯을 새롭게 제공합니다. 여러 환경에서 작업해야 할 경우, 설정으로 이동하지 않고도 환경을 바로 전환할 수 있습니다.

HTTP 클라이언트

HTTP 클라이언트의 바이너리 응답

HTTP 클라이언트는 이제 바이너리 응답을 지원합니다. 수신된 응답이 이미지인 경우 응답 콘솔에서 바로 미리보기를 확인할 수 있습니다.

사용자 지정 파일 또는 디렉터리로 출력 리디렉션

HTTP 클라이언트는 사용자 지정 파일 또는 디렉터리로 출력을 리디렉션할 수 있습니다. 강제 리디렉션 및 소프트 리디렉션을 위해 다음과 같이 2가지 연산자가 지원됩니다.

  • >> 연산자: 항상 새 파일을 생성하고, 파일 이름이 이미 있는 경우 -n 접미사를 추가합니다.
  • >>! 연산자: 파일이 이미 있는 경우 파일을 다시 작성합니다.

명시적 파일 경로를 제공하는 것 외에도 사전 정의된 새로운 변수를 사용할 수 있습니다. {{$projectRoot}}는 프로젝트 루트 폴더를 가리키며, {{$historyFolder}}요청 기록 폴더를 가리킵니다.

HTTP 요청 식별자 지원

PhpStorm 2021.3에서는 HTTP 요청의 이름을 지정할 수 있습니다! @name 및 요청 구분 기호(###)의 텍스트를 사용하여 식별자를 주석으로 제공할 수 있습니다.

다음으로 Run Configuration(실행 구성), Run Anything(무엇이든 실행) 또는 Search Everywhere(전체 검색) 대화상자의 Services(서비스) 도구 창을 통해 이름으로 요청을 호출할 수 있습니다.

사용자 경험

새 Bookmarks(북마크) 도구 창

PhpStorm 2021.3에서는 Favorites(즐겨찾기)Bookmarks(북마크) 기능이 Bookmarks로 병합되었습니다. F11을 누르면 특정 줄, 파일 또는 폴더에서 북마크를 추가할 수 있습니다. 추가된 모든 북마크는 통합 Bookmarks(북마크) 도구 창에서 확인 가능합니다.

Show Usages(사용 위치 표시)의 소스 미리보기

심볼을 Ctrl+클릭하여 호출 가능한 Show Usages(사용 위치 표시) 대화상자에서 찾은 사용 위치별 소스 코드 미리보기가 표시됩니다. 미리보기를 활성화하려면 Icon of the toolbar button 툴바 버튼을 클릭하세요.

VCS

Align Changes Highlighting(변경 내용 강조 표시 정렬)

톱니바퀴 아이콘 아래의 Diff 화면 설정에 Align Changes Highlighting(변경 내용 강조 표시 정렬) 옵션이 새롭게 추가되었습니다. 이 기능을 사용하면 변경되지 않은 줄이 나란히 표시되도록 정렬하여, 복잡한 수정 사항이 있는 경우 Diff를 더 쉽게 읽을 수 있습니다. 따라서 추가 또는 삭제된 코드를 더 명확하게 살펴볼 수 있습니다.

원격 브랜치에서도 작동하는 Checkout and Rebase onto Current(체크아웃하고 현재 브랜치에 리베이스)

Checkout and Rebase on Current(체크아웃 후 현재 브랜치상에서 리베이스) 액션을 사용하면 선택한 브랜치를 체크아웃하고 현재 체크아웃된 브랜치상에서 리베이스할 수 있습니다. PhpStorm 2021.3을 사용하면 이전에는 로컬 브랜치에서만 지원되었던 이 액션을 원격 브랜치에도 적용할 수 있습니다.

새로운 Push All up to Here(여기까지의 내용을 모두 푸시) 액션

일부 커밋은 내보낼 준비가 되었으나 다른 커밋은 아직 작업 중인 경우, 확실히 준비된 커밋만 푸시할 수 있습니다. PhpStorm 2021.3을 사용하면 Git 도구 창의 Log(로그) 탭에서 선택한 커밋까지 푸시할 수 있습니다. 필요한 커밋을 선택하고 마우스 오른쪽 버튼으로 클릭한 후 새로운 Push All up to Here(여기까지의 내용을 모두 푸시) 액션을 사용하세요.

VCS 설정 재구성

Settings(설정)/Preferences(환경 설정)Version Control(버전 관리) 페이지가 간소화되어 더욱 사용하기 쉽고, 지원되는 모든 설정이 표시됩니다. Git 노드는 가장 중요한 프로세스를 고려한 Commit(커밋), Push(푸시), Update(업데이트) 섹션으로 나뉩니다. Directory mappings(디렉터리 매핑)을 위한 별도의 노드가 추가되었습니다. 이제 백그라운드 작업이 기본적으로 실행되므로, Background(백그라운드) 노드는 제거되었습니다.