PHP PHP Enum과 기존 상수 클래스 비교 및 활용법
페이지 정보

영삼이
본문
✅ 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
를 활용해야 함
- 이전글PHP에서 로직 분리: 서비스 계층 설계 팁 25.03.28
- 다음글PHP에서 메타프로그래밍 흉내내기 25.03.28
댓글목록
등록된 댓글이 없습니다.