blog.stackframe.dev

[PHP 8.2] 동적 속성 기능 제거 예정

PHP 8.2가 2022년 12월 8일에 출시되었다. 최근까지 개인적으로 정신없는 나날을 보냈고 이런 저런 이유로 업데이트를 미루다 오늘 서버 시스템을 업데이트했다.

예전부터 다음 PHP 버전에 어떤 기능이 추가되는지, 삭제되는 기능이 무엇인지 확인하고 내 코드에 수정되어야 할 부분이 있는지 알아보는 등 미리 준비를 해뒀기에 큰 문제는 발생하지 않았다. 다만 몇 가지 마이너한 경고가 발생했다. 그 경고들은 모두 Dynamic Property가 deprecated 되었다는 것이었다.

이번 PHP 8.2로 업데이트 할 때 일반 사용자가 가장 많이 보게 될 경고가 바로 내가 겪은 동적 속성이 제거될 예정이라고 생각한다. 지금까지 PHP는 클래스 내부에서 선언되지 않은 속성에 대해 메소드 내부에서 값을 대입시켜도 자동으로 해당 속성을 할당하고 값을 넣어줘서 아무런 문제 없이 작동했다. 하지만 앞으로는 이 기능이 사라지고 개발자는 무조건 사용되는 속성을 클래스 내부에 선언해줘야 한다. 현재는 경고에 그치지만 앞으로 나올 버전에서는 에러로 격상 될 예정이다. 이 경고를 일단 없애고 싶다면 #[\AllowDynamicProperties]를 사용하면 된다. 물론 바람직한 해결법은 아니다. 궁극적으로 사용되는 속성을 미리 선언하게 수정하는 것이 맞다. 예외적으로 stdClass는 동적으로 속성을 추가할 수 있다.

나는 이전부터 타입에 엄격한 언어를 많이 사용했기에 PHP에서도 언제나 선언 및 초기화를 했다. 그래서 경고도 얼마 발생하지 않았고 금방 수정이 가능했다. 개인적으로 이런 문법적으로 엄격해지는 변경사항이 좋다고 생각한다. 이번 경고를 통해 내가 실수로 잘못 작성한 부분을 찾을 수 있었고, 사용되는 속성을 먼저 나열하게 되기에 메소드 중간에 갑작스럽게 속성이 추가되어 이해하기 어려운 코드가 생성되는 것도 막을 수 있다. 물론 PHP가 자유도가 높은 언어이고 그에 따른 이점도 있지만, 나는 코드의 자유도가 조금 떨어지더라도 버그를 발생할 여지를 줄일 수 있다면 그것이 더 좋다고 생각한다.

댓글