개발 지식

개발 지식

PHP PHP Enum과 기존 상수 클래스 비교 및 활용법

페이지 정보

profile_image
영삼이
0건 178회 25-03-28 23:07

본문

✅ PHP Enum과 기존 상수 클래스 비교 및 활용법

PHP 8.1부터 Enum(열거형) 기능이 정식 도입되면서, 기존에 상수(const)를 사용하는 방식보다 더 강력하고 안전한 방법으로 상태값을 다룰 수 있게 되었습니다. 이 글에서는 기존 상수 클래스와의 차이점, 그리고 Enum의 실전 활용법을 소개합니다.


📌 기존 상수 클래스 방식

[code=php]
class UserStatus {
    const ACTIVE = 'active';
    const INACTIVE = 'inactive';
    const BANNED = 'banned';
}
[/code]
  • 문자열 오타 방지 불가능

  • IDE 자동완성 미흡

  • 값의 범위 제한 불가


🆕 PHP 8.1 Enum 방식

[code=php]
enum UserStatus: string {
    case ACTIVE = 'active';
    case INACTIVE = 'inactive';
    case BANNED = 'banned';
}
[/code]
  • UserStatus::ACTIVE 처럼 사용

  • 문자열과 매핑 가능 (: string)

  • 안전한 값 범위 보장

  • IDE 자동완성 완벽 지원


🎯 사용 예시

조건 비교

[code=php]
$status = UserStatus::ACTIVE;

if ($status === UserStatus::ACTIVE) {
    echo '활성 사용자';
}
[/code]

switch와 함께 사용

[code=php]
switch ($status) {
    case UserStatus::ACTIVE:
        echo '활성';
        break;
    case UserStatus::INACTIVE:
        echo '비활성';
        break;
}
[/code]

string 값으로 변환

[code=php]
echo UserStatus::BANNED->value; // "banned"
[/code]

🧩 메서드를 포함한 Enum

[code=php]
enum UserRole: string {
    case ADMIN = 'admin';
    case USER = 'user';

    public function isAdmin(): bool {
        return $this === self::ADMIN;
    }
}

if (UserRole::ADMIN->isAdmin()) {
    echo '관리자입니다';
}
[/code]
  • Enum 내부에 메서드 정의 가능

  • 로직 캡슐화에 매우 유용


🔄 기존 값으로부터 Enum 인스턴스 만들기

[code=php]
$status = UserStatus::from('active'); // 없는 값이면 예외
$status = UserStatus::tryFrom('active'); // 없는 값이면 null 반환
[/code]

✅ 요약

항목 상수 클래스 Enum
값 제한 ❌ 불가능 ✅ 가능
자동완성 ❌ 제한적 ✅ 완벽
메서드 포함 ❌ 불가능 ✅ 가능
타입 안정성 ❌ 약함 ✅ 강함

🚨 참고사항

  • Enum은 PHP 8.1 이상에서만 사용 가능

  • DB에 Enum을 저장할 땐 .value를 활용해야 함


댓글목록

등록된 댓글이 없습니다.