들어가기에 앞서
참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.
Enum?
쇼핑몰을 주제로 한 스프링부트 오픈소스를 살펴 보던 중 Enum을 활용한 파트가 제대로 이해되지 않아 정리하려고한다.
enum은 열거,목록 등의 뜻을 가진 enumeration에서 앞 부분만 딴 예약어이다. 단어의 뜻에서 짐작할 수 있듯이, 비슷한 카테고리의 뜻을 지닌 상수들을 열거하고 집합시켜 정의할 수 있게 도와주는 역할을 한다.
enum은 public enum Animal{LION,PIG,DOG} 와 같은 형태로 설정이 가능하다.
Enum의 활용
다음은 enum의 활용 형태이다.
1.
계산식 지정
public enum Calculator {
CALC_A(value -> value), // 람다 함수식 선언
CALC_B(value -> value * 3),
CALC_C(value -> value * 10),
CALC_ETC(value -> 0L);
private Function<Long,Long> expression; //Long타입의 인수와 리턴 값 지정
Calculator(Function<Long,Long> expression){ //생성자에 Function인터페이스 인스턴스 생성
this.expression = expression;}
public long calculate(long value){
return expression.apply(value);} // 함수식 적용
public static void main(String[] args) {
Calculator cb = CALC_B; // B계산식 선택
System.out.println(cb.calculate(100)); // 300출력
}
}
Java
복사
•
enum으로 A,B,C 형태의 계산식을 지정해놓고 생성자 인자값으로 함수를 지정해줌으로써(JAVA 8 이후 가능) A,B,C 타입 선택에 따른 계산식 실행이 가능.
•
각각의 코드가 본인만의 계산식을 가지게 됨.
2.
각 상수의 속성 지정 및 활용
public enum Planet {
MERCURY (3.303e+23, 2.4397e6), // 질량과 반지름
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) { // 행성의 질량과 반지름 속성 지정
this.mass = mass;
this.radius = radius;
}
private double mass() { return mass; }
private double radius() { return radius; }
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;
double surfaceGravity() {
return G * mass / (radius * radius);
}
double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java Planet <earth_weight>");
System.exit(-1);
}
double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/EARTH.surfaceGravity();
for (Planet p : Planet.values())
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass)); // 지구 기준, 각 행성 질량 출력
}
}
Java
복사
•
태양계 행성과 각 행성들의 질량과 반지름을 속성으로 지정함으로써 표면중력,질량 계산에 편리하게 사용 가능
•
enum의 값은 Iterable 형태이기에 반복문을 사용하여 호출이 가능하다.