Enum 클래스

전윤지·2021년 12월 9일
0

JAVA

목록 보기
10/10

1. Enum이란

  • 서로 연관된 상수의 집합
  • final static String, final static int와 같은 값을 Enum으로 대체해서 사용 가능

💡 그냥 상수 (final static) 사용하면 되는데, 왜 Enum을 사용?
(1) 코드가 단순해짐. 가독성 좋아짐.
(2) 인스턴스 생성, 상속 방지 => 상수의 타입 안정성 보장됨
(3) 정의한 타입이외의 타입을 가진 데이터값을 compile시 체크함 => 지정한 값이 할당 됐는지 안됐는지 check


Enum이 필요한 이유 예시

// enum class를 이용해 Gender라는 새로운 상수들의 타입을 정의
enum Gender { 
	MALE,
	FEMAL; 
}
// 기존의 상수 정의 방법
public static final String MALE = "MALE";
public static final String FEMALE = "FEMALE";

public static void main(String[] args) {
		String gender1;
		gender1 = EnumExample.MALE;
		gender1 = EnumExample.FEMALE;
		// MALE, FEMALE이 아닌 상수 값 됨 => 컴파일시 에러 발생 X => 문제!!
		gender1 = "boy";
        
        	// enum class의 변수 사용
		Gender gender2;
		gender2 = Gender.MALE;
		gender2 = Gender.FEMAL;
		// 컴파일 시 의도하지 않는 상수 값을 체크할 수 있음.
		gender2 = "boy";
	}
  • Enum 클래스를 사용하면, 원하지 않은 값이 들어간 것을 check 할 수 있음
  • enum class의 인스턴스를 생성하지 않고 사용?
    - 내부적으로 코드가 생략되었을 뿐, 다음과 같음
    public static final Gender MALE = new Gender();
    public static final Gender FEMALE = new Gender();

2. Enum 사용하기

1) Enum 선언

  • Enum class는 다른 클래스와 마찬가지로 별도의 java 파일, 클래스 안, 클래스 밖 선언 가능

(1) 별도의 .java 선언

package EnumExample;

public enum DevType {
	MOBILE, WEB, SERVER
}
package EnumExample;

public class Developer {
	public String name;
	public int career;
	public DevType type;
}

(2) class 내부 선언

package EnumExample;

public class Developer {
	public String name;
	public int career;
    
	public enum DevType {
		MOBILE, WEB, SERVER
	}
}

(3) class 외부 선언

package EnumExample;

public class Developer {
	public String name;
	public int career;
	public DevType type;
}

enum DevType {
	MOBILE, WEB, SERVER
}

3. Enum 사용

  • (enum 클래스.변수) 또는 (enum 함수.변수)로 사용
public class Developer {
	public String name;
	public int career;
	public DevType type;

	public static void main(String[] args) {
		Developer developer = new Developer();
		developer.name = "홍길동";
		developer.career = 3;
		developer.type = DevType.WEB;
		System.out.println("개발자 이름 : " + developer.name);
		System.out.println("개발자 경력 : " + developer.career);
		System.out.println("직무파트 : " + developer.type);
	}
}

enum DevType {
	MOBILE, WEB, SERVER
}

(1) values()

  • 모든 객체를 배열로 리턴

(2) ordinal()

  • 몇 번째 객체인지 알려줌
  • 0번째부터 시작

(3) valueOf()

  • 매개변수와 일치하는 객체 반환 (없을경우 error 발생)


참고 : https://limkydev.tistory.com/66

0개의 댓글