Skip to main content

Fluent 클래스란

Fluent 클래스는 배열을 오브젝트처럼 다룰 수 있는 범용 유틸리티 클래스입니다. Illuminate\Support\Fluent에 구현되어 있으며, Laravel 초기 버전부터 존재하지만 공식 문서에는 거의 기재되어 있지 않습니다. 내부적으로는 배열을 프로퍼티로 관리하고, 매직 메서드(__get / __set / __call)를 통해 프로퍼티와 같은 읽고쓰기를 실현하고 있습니다.
Laravel 11에서 fluent() 헬퍼가 추가되었고, Fluent 클래스도 기능이 강화되어, 지금이야말로 활용해야 할 훌륭한 클래스입니다.

인스턴스 생성

컨스트럭터

make() 팩토리 메서드

fluent() 헬퍼 함수

Laravel 11에서 fluent() 헬퍼가 추가되었습니다. Fluent::make()와 동등합니다.

프로퍼티 접근

동적 프로퍼티의 읽고쓰기

메서드 체인

__call 매직 메서드에 의해, 존재하지 않는 메서드를 호출하면 프로퍼티가 설정됩니다. 메서드는 $this를 반환하므로 체이닝할 수 있습니다.
이 구조에 의해, 배열 대신 유창한 API(Fluent Interface)로 값을 설정할 수 있습니다.

주요 메서드

get() — 도트 표기법으로 접근

set() — 도트 표기법으로 세팅

fill() — 여러 프로퍼티를 한 번에 설정

all() — 모든 프로퍼티를 배열로 취득

scope() — 중첩된 값을 새 Fluent로 변환

이를 통해, 중첩된 배열을 별도의 Fluent 오브젝트로 다룰 수 있습니다.

value() — 기본값을 콜백으로 동적 지정

배열 조작

toArray() — 배열로 변환

getAttributes() — 내부 속성에 직접 접근

ArrayAccess 인터페이스

Fluent는 ArrayAccess를 구현하고 있으므로, 배열처럼 조작할 수 있습니다.

IteratorAggregate 인터페이스

Fluent는 foreach로 루프할 수 있습니다.

JSON 처리

toJson() — JSON 문자열로 변환

toPrettyJson() — 정형된 JSON으로 변환

JsonSerializable 인터페이스

Fluent는 JsonSerializable을 구현하고 있으므로, json_encode()로 직접 변환할 수 있습니다.

상태 확인

isEmpty() / isNotEmpty()

Conditionable 트레이트

Fluent는 Conditionable 트레이트를 사용하고 있으며, 조건부 처리를 지원합니다.
when() / unless() 메서드를 사용함으로써, 조건에 기반한 설정을 유창하게 기술할 수 있습니다.

Macroable 트레이트

Fluent는 Macroable 트레이트도 사용하고 있으며, 동적으로 메서드를 추가할 수 있습니다.

실전적인 유스케이스

API 응답 빌더

Config 빌더

요청 파라미터의 검증·변환

모델과 Fluent의 조합

폼 데이터의 정규화

다른 클래스와의 비교

Fluent vs Array

Fluent vs Model

내부 구현의 상세

__call 메서드는, 매크로가 등록되어 있지 않은 경우, 메서드명을 프로퍼티 키로 하여 속성에 값을 설정하고, $this를 반환합니다. 이것이 메서드 체인을 가능하게 하고 있습니다.
Fluent는 다음의 트레이트를 사용하고 있으며, 각각 다른 기능을 제공합니다:
  • Conditionablewhen() / unless()로 조건부 처리
  • InteractsWithDatadata() 등의 데이터 조작 메서드
  • Macroable — 동적 메서드 추가

다음 단계

Collection 클래스

여러 요소를 다루는 Collection 클래스를 심층 분석합니다.

Conditionable 트레이트

조건부 처리를 유창하게 기술하는 Conditionable 트레이트를 배웁니다.

Macroable 트레이트

기존 클래스에 동적 메서드를 추가하는 Macroable 트레이트를 배웁니다.
마지막 수정일 2026년 7월 13일