PHP 8.5 파이프 연산자 vs Laravel Collections
PHP 8.5에서 파이프 연산자가 도입되었습니다. 대부분의 Laravel 개발자들은 이를 무시했습니다. 우리는 수년 동안 collect()->filter()->map()을 사용해 왔고, 이는 잘 작동합니다.
그 후 Spatie에서 Piper를 출시했습니다. Piper는 파이프 연산자에 Laravel 스타일의 헬퍼를 가져다주는 라이브러리입니다. 배열과 문자열을 위한 독립형 함수를 사용합니다.
Piper가 Collections를 대체할까요? 아닙니다. Piper는 다른 목적을 위해 존재합니다.
Piper가 우세한 점
• 네이티브 값. Collections는 데이터를 객체로 감쌉니다. 따라서 배열을 Collections로 변환했다가 다시 되돌려야 합니다. Piper는 일반 배열 및 문자열과 함께 작동합니다. 데이터가 네이티브 형태로 들어가고 네이티브 형태로 나옵니다.
• 함수 혼합. Collection 체인은 Collection 클래스의 메서드만 호출할 수 있습니다. 반면 파이프 체인은 어떤 함수든 수용합니다. Piper 헬퍼, 네이티브 PHP 함수, 그리고 사용자 정의 함수를 하나의 흐름 안에서 혼합하여 사용할 수 있습니다.
• 의존성 제로. Piper는 Laravel 프레임워크가 필요하지 않습니다. 덕분에 무거운 의존성 없이 깔끔한 코드를 원하는 패키지 제작자들에게 완벽한 도구입니다.
Collections가 우세한 점
• 기능의 깊이. Collections에는 groupBy()나 pluck()과 같은 100개 이상의 메서드가 있습니다. Piper에는 가장 흔히 쓰이는 기능들만 들어 있습니다.
• 지연 평가(Lazy evaluation). LazyCollections은 적은 메모리로 대규모 데이터 세트를 처리합니다. Piper는 매 단계마다 새로운 배열을 생성합니다. 이는 대용량 데이터를 다룰 때 앱의 속도를 늦출 수 있습니다.
• 생태계 적합성. Eloquent는 Collections를 반환합니다. Query builder도 Collections를 반환합니다. Piper를 사용하기 위해 프레임워크와 싸우는 것은 종종 더 많은 수고를 불러옵니다.
• 발견 용이성. Collection 뒤에 대시(->)를 입력하면 IDE가 모든 메서드를 보여줍니다. Piper를 사용할 때는 모든 함수를 수동으로 임포트해야 합니다.
결정적인 제약 사항
PHP 8.5를 실행해야 합니다. 대부분의 운영 서버는 여전히 8.2 또는 8.4를 실행 중입니다. 만약 8.5 버전을 사용하고 있지 않다면, 현재 Piper는 아무런 쓸모가 없습니다.
도입 팁
패키지를 작성하거나 프레임워크에 종속되지 않는(framework-agnostic) 코드를 작성한다면 Piper를 사용하세요. 객체의 오버헤드 없이 네이티브 배열을 변환하고 싶을 때 유용합니다.
Laravel 앱 내부에서는 Collections를 계속 사용하세요. Collections는 통합되어 있고 강력하며, 팀원들이 기대하는 방식입니다.
Piper는 대체재가 아닙니다. 프로젝트 사이의 빈틈을 메워주는 도구입니다.
