Search
Duplicate

Enum 클래스 맛보기

Created time
2023/04/24 09:02
Last edited time
2023/07/11 01:25
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

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 형태이기에 반복문을 사용하여 호출이 가능하다.

참고