enumeration class는 열거형 클래스로 연관된 상수들의 집합이다
class 의 일종으로 생성자를 가질수있지만 접근제어자는 private형만 가능하다
enum class도 일반클래스와 마찬가지로 컴파일할때 자동으로 생성자를만들어주지만
private이기때문에 생성자를 통하여 객체를 생성할수는없다
enum class 의 values() method를 호출하면
enum class내에 선언되있는 모든 상수를 리턴한다.
//public class
public static final int PLATINUM_MEMBER = 1;
public static final int LOYAL_MEMBER = 2;
public static final int GOLD_MEMBER = 3;
public static final int SILVER_MEMBER = 4;
//finall로 상수화시켜 더쉽게 이해할수있게한다
//상수가 많아질경우 복잡해질수있다
//main
int grade = GOLD_MEMBER;
switch(grade) {
case PLATINUM_MEMBER:
System.out.println(30+"% discount");
break;
case LOYAL_MEMBER:
System.out.println(20+"% discount");
break;
case GOLD_MEMBER:
System.out.println(10+"% discount");
break;
case SILVER_MEMBER:
System.out.println(5+"% discount");
break;
//이와같이 개발자 입장에서 이해하기쉽다
----------
interface A{
int PLATINUM_MEMBER = 1,LOYAL_MEMBER = 2,GOLD_MEMBER = 3,SILVER_MEMBER = 4;
} //상수가 많을경우 interface를 만들어서 더 단순하게 쓸수있다
//불러올때 앞에 interface명을 붙여줘야한다. ex(A.GOLD_MEMBER;)
//public class
//main
int grade = A.GOLD_MEMBER;
switch(grade) {
case A.PLATINUM_MEMBER:
System.out.println(30+"% discount");
break;
case A.LOYAL_MEMBER:
System.out.println(20+"% discount");
break;
case A.GOLD_MEMBER:
System.out.println(10+"% discount");
break;
case A.SILVER_MEMBER:
System.out.println(5+"% discount");
break;
-------------
interface A{
int PLATINUM_MEMBER = 1,LOYAL_MEMBER = 2,GOLD_MEMBER = 3,SILVER_MEMBER = 4;
} //상수가 많을경우 interface를 만들어서 더 단순하게 쓸수있다
interface B{
int PLATINUM_MEMBER = 1,LOYAL_MEMBER = 2,GOLD_MEMBER = 3,SILVER_MEMBER = 4;
} //불러올때 앞에 interface명을 붙여줘야한다. ex(B.GOLD_MEMBER;)
//A, B 두회사가 있을시 등급은 4등급으로 같지만 할인율이 다를수있다
//public class
//main
if(A.PLATINUM_MEMBER == B.PLATINUM_MEMBER) {
System.out.println(" A,B의 할인율은 같다")
} //기본형인 int형을 비교하기때문에 error가 발생하지않지만
//runtime중 error가 발생할수있기 때문에 좋은방법이 아니다.
-------------
//interface내의 각각의 상수를 class로 설정할수있다
class A{
public static final A PLATINUM_MEMBER = new A();
public static final A LOYAL_MEMBER = new A();
public static final A GOLD_MEMBER = new A();
public static final A SILVER_MEMBER = new A();
}
class B{
public static final B PLATINUM_MEMBER = new B();
public static final B LOYAL_MEMBER = new B();
public static final B GOLD_MEMBER = new B();
public static final B SILVER_MEMBER = new B();
} //각각의 상수를 Class로 설정할경우 코드가 복잡해지고
//A, B를 비교할때 error를 찾을수있지만 stitch문에 적용할수없다
//public class
//main
-----------------
//memR.GOLD_MEMBER형태로 불러온다
//enum class를 사용할경우 관리하기가 간편해지고 switch문에도 적용이된다
// class memR{
// public static final memR PLATINUM_MEMBER = new memR();
// public static final memR LOYAL_MEMBER = new memR();
// public static final memR GOLD_MEMBER = new memR();
// public static final memR SILVER_MEMBER = new memR();
// private memR() {}
// } //enum class를 만들경우 이와같이 상수의 개수만큼
// 생성자가 호출이 되서 객체를 생성한다
enum memR{
PLATINUM_MEMBER,LOYAL_MEMBER,GOLD_MEMBER,SILVER_MEMBER;
}
//public class
//main
memR grade = memR.GOLD_MEMBER;
switch(grade) {
case PLATINUM_MEMBER:
System.out.println(30+"% discount");
break;
case LOYAL_MEMBER:
System.out.println(20+"% discount");
break;
case GOLD_MEMBER:
System.out.println(10+"% discount");
break;
case SILVER_MEMBER:
System.out.println(5+"% discount");
break;
}
------------
//enum class안에 멤버나 method를 만들어 효율적으로 사용할수있다
//enum memR
PLATINUM_MEMBER(30),LOYAL_MEMBER(20),GOLD_MEMBER(10),SILVER_MEMBER(5);
//인자를 가진 생성자를 만들어줬기때문에 인자를 입력해주어야한다
int discount;
memR(int discount){
this.discount = discount;
}//생성자생성, 접근제어자로 private, default가 올수있다
public String getDiscount() {
return discount + "% discount";
}//method생성
//할인율이 변경될수 직접바꿔줘야한다는 단점이있지만 switch문보다 성능면에서 더좋다
//public class
//main
memR mm = memR.ROYAL_MEMBER;
System.out.println(mm); //royal member가 출력된다
String str = mm.getDiscount(); //값을 return받는 변수생성
System.out.println(str);
//loyal member 20% discount가 출력된다
for(memR marr : memR.values()) { //for each문으로 각각의상수들을 array에 저장한다
System.out.println(marr+marr.getDiscount());
} //각각의 상수와 할인율을 출력할수있다
'java' 카테고리의 다른 글
Colletions framework(ArrayList, HashSet) (0) | 2019.08.04 |
---|---|
Generic (0) | 2019.08.04 |
wrapper class (0) | 2019.08.03 |
Object class(toString(), Equals(), hashCode()) (0) | 2019.08.03 |
예외처리(Exception) (0) | 2019.08.03 |