(JAVA) Enum

지식저장공간·2022년 10월 17일
0

Java

목록 보기
11/18

Enum

Enum의 개념

Java의 Enum은 완전한 기능을 갖춘 클래스이다.
변하지 않는 값, 상수를 사용하기 위한 개념
단순 0,1,value1,value2을 사용했을때 의미하는바를 알 수 없다.

변수

int value1 = 0;

정의한 코드를 찾지 않는이상 어떤값을 의미하는지 알 수 없다.

상수

final int APPLE = 1;
final int BANANA = 2;

final int GOOGLE = 3;
final int APPLE = 4; 
error : 상수는 불변, 종단 변하지 않는값이다.

Solution 1)

final int FRUIT_APPLE = 1;
final int COMPANY_APPLE =4;

Solution 2)

interface FRUIT{ int APPLE = 1;} > FRUIT.APPLE
interface COMPANY{ int APPLE = 4;} > COMPANY.APPLE

상수의 충돌을 해결할 수 있다.

Solution 3)

class Fruit{ public static final Fruit APPLE = new Fruit();}
class Company{ public static final Company APPLE = new Company;}

데이터 타입 FRUIT를 가지고 있는 상수, 인스턴스 APPLE
데이터 타입 COMPANY를 가지고 있는 상수, 인스턴스 APPLE

Fruit APPLE != Company APPLE

Enum의 문법

Enum(열거형) : 서로 연관된 상수들의 집합
Enum에 존재하는 상수는 묵시적으로 public static final이다.
1. 코드의 간결화 : 복합하게 작성해야하는 클래스 참조상수를 간단하게 작성할 수 있다.
2. 인스턴스 생성과 상속을 방지한다.
3. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.

Enum 구현

enum Fruit{ APPLE, PEACH, BANANA; }

==

class Fruit{ 
	public static final Fruit APPLE = new Fruit();
	public static final Fruit PEACH = new Fruit();
    public static final Fruit BNANA = new Fruit();
} 

Enum내 존재하는 상수 APPLE, PEACH, BANANA는 Enum클래스이다.

Fruit type = Fruit.APPLE;
switch(type){
	case APPLE: break;
    case PEACH: break;
    case BANANA: break;
}

Enum Fruit의 참조형 변수 type에 인스턴스 APPLE을 대입하고 조건절을 사용할 수 있다.

Enum과 생성자, Getter

enum Fruit{ 
  APPLE("red",1), 
  PEACH("pink",2), 
  BANANA("yellow",3); 
  
  public String color;
  public int num;
  
  Fruit(String color, int num){
  	this.color = color;
    this.num = num;
  }
}

1)생성자만 사용한 경우
Fruit.APPLE.color.equals("red") == true
Fruit.PEACH.color.equals("pink") == true
Fruit.BANANA.color.equals("yellow") == true

Fruit.APPLE.num == 1
Fruit.PEACH.num == 2
Fruit.BANANA.num == 3

2) Getter존재 시

Fruit.APPLE.getColor() -> return : red
Fruit.PEACH.getColor() -> return : pink
Fruit.BANANA.getColor() -> return : yellow

3)Enum의 상수 값 출력
public static void main(String[] args){
	for(Fruit f : Fruit.values()){
    	System.out.print(f);
    }
}

Console : APPLE, PEACH, BANANA

Enum의 장점

  • 문자열과 비교해, IDE의 적극적인 지원을 받을 수 있다.
  • 자동완성, 오타검증, 텍스트 리팩토리 등등
  • 허용 가능한 값들을 제한할 수 있다.
  • 리팩토링시 변경 범위가 최소화된다
  • ★ 내용의 추가 변경이 필요하더라고, Enum 코드 외 수정할 필요가 없다.

    출처: 생활코딩 유튜브
    출처 : https://www.topjavatutorial.com/
    출처 : 우아한형제들 기술블로그

    profile
    발전하는 개발자가 꿈입니다. 지식을 쌓고 지식을 활용해 목표 달성을 추구합니다.

    0개의 댓글