⚠️ 2021.06.30에 작성된 글입니다 ⚠️
※ php 7.4 버전 기준 작성 ※
Enum이란?
Enumerated type의 줄임말로, 열거형이란 뜻이다.
서로 관련있는 상수들을 열거한 집합을 말한다.
예를 들어 사과, 바나나, 딸기라는 세 상수를 과일이란 집합으로 묶어 과일 enum을 만들 수 있다.
아래 코드는 위에서 말한 과일 enum을 Kotlin으로 구현한 것이다.
enum class Fruit {
APPLE, BANANA, STRAWBERRY
}
이런 enum은 충분히 예측가능한 상수들을 다룰 때 사용한다.
그 예로, 옷을 고를 때 초록색, 파란색, 빨간색, 검정색 중에서만 선택할 수 있다고 할 때, 다음과 같이 enum을 만들어 사용할 수 있는 것이다.
enum class Color {
GREEN, BLUE, RED, BLACK
}
초록색을 선택했다고 하면 다음과 enum을 사용해 같이 옷의 색을 초록색으로 세팅해줄 수 있다.
clothes.color = Color.GREEN
또는 옷의 색깔에 따라 다른 동작을 하도록 하는 기능을 구현할 수도 있다.
when(clothes.color) {
Color.GREEN -> {
println("초록색 옷입니다")
}
Color.BLUE -> {
println("파란색 옷입니다")
}
Color.RED -> {
println("빨간색 옷입니다")
}
Color.BLACK -> {
println("검정색 옷입니다")
}
}
여기까지의 코드는 모두 Kotlin으로 구현한 것이다. 이제 php에서도 enum을 구현해보자.
구현 순서
- enum 클래스 만들기
- 클래스에 상수 선언하기
- 필요한 메소드 만들기
Color enum 클래스
초록색, 파랑색, 빨간색, 검은색의 집합인 color클래스를 만든다. 각 색은 상수로 선언한다.
상수를 선언할 때에는 키워드 const(constant, 상수)를 사용한다.
class Color
{
const GREEN = "초록색";
const BLUE = "파랑색";
const RED = "빨강색";
const BLACK = "검정색";
function __construct()
{
}
}
이후 color 객체를 생성해 다음과 같이 색깔 상수를 사용할 수 있다.
$color = new Color();
echo "1번 옷은 " . $color::BLACK . " 입니다.";
// output: 1번 옷은 검정색 입니다.
필요한 메소드 추가하기
Color클래스의 객체를 생성할 때, 객체의 색을 미리 선택하게 하고, 객체의 색이 무엇인지 가져오는 메소드를 추가해보자.
먼저 생성자가 색깔 값을 받도록 수정한다. 이때, 존재하지 않는 색을 입력했다면 객체의 색을 null로 설정하도록 했다.
class Color
{
private $value;
...
function __construct(string $value)
{
if ($value !== $this::GREEN
&& $value !== $this::BLUE
&& $value !== $this::RED
&& $value !== $this::BLACK) {
$this->value = null;
} else {
$this->value = $value;
}
}
}
객체의 색을 가져오는 메소드 get_value()를 추가한다.
class Color
{
...
function get_value(): ?string
{
return $this->value;
}
}
수정된 Color 클래스
class Color
{
private $value;
const GREEN = "초록색";
const BLUE = "파랑색";
const RED = "빨강색";
const BLACK = "검정색";
function __construct(string $value)
{
if ($value !== $this::GREEN
&& $value !== $this::BLUE
&& $value !== $this::RED
&& $value !== $this::BLACK) {
$this->value = null;
} else {
$this->value = $value;
}
}
function get_value(): ?string
{
return $this->value;
}
}
이렇게 수정된 클래스를 다음과 같이 활용할 수 있다.
$a = new Color("빨강색");
$b = new Color("파랑색");
$c = new Color("노랑색"); // $c -> value = null
echo "a의 옷은 " . $a->get_value() . "입니다.";
echo "<br/>";
if ($b->get_value() === $b::BLACK) {
echo "b는 검정색 옷을 입고 있습니다.";
} else {
echo "b는 검정색이 아닌 옷을 입고 있습니다.";
}
echo "<br/>";
switch ($c->get_value()) {
case $c::GREEN:
echo "c는 푸른 빛의 옷을 선택했습니다.";
break;
case $c::BLUE:
echo "c는 초록초록한 옷을 선택했습니다.";
break;
case $c::RED:
echo "c는 가장 따뜻한 색의 옷을 선택했습니다.";
break;
case $c::BLACK:
echo "c는 가장 어두운 옷을 선택했습니다.";
break;
default:
echo "c는 아직 옷을 고르지 않았습니다.";
break;
}
/*
* output:
*
* a의 옷은 빨강색입니다.
* b는 검정색이 아닌 옷을 입고 있습니다.
* c는 아직 옷을 고르지 않았습니다.
*
*/
'Language > PHP' 카테고리의 다른 글
[PHP] 비밀번호 암호화 저장, 비교하기 (0) | 2022.10.24 |
---|---|
[PHP] 에러 표시하기 (0) | 2022.10.24 |