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

+ Recent posts