저번 enum 1에서는 int enum 패턴의 문제점을 확인하였다. 이번부터는 enum이란 과연 무엇인지 본격적으로 알아보자.
enum이란?
· 열거 자료형(enummerated type)은 고정 개수의 상수들로 값이 구성되는 자료형.
· 자바의 enum 자료형은 완전한 기능을 갖춘 클래스.
· 열거 상수(enumeration constant)별로 하나의 객체를 public static final 필드 형태로 제공하는 것. (클라이언트가 접근할 수 있는 생성자가 없기 때문)
· enum 자료형의 개체 수는 엄격히 통제됨. (싱글턴 패턴을 일반화 한 것)
· enum 자료형은 컴파일 시점 형 안정성(compile-time type safety)을 제공함.
· enum 자료형은 name space가 분리되어 있기 때문에 같은 이름의 상수가 평화롭게 공존할 수 있음.
· 상수를 제공하는 필드가 enum 자료형과 클라이언트 사이에서 격리 계층(layer of insulation) 구실을 하기 때문에 상수를 추가하거나 순서를 변경해도 다시 컴파일할 필요가 없음.
· toString 메서드를 호출하면 인쇄 가능 문자열로 쉽게 변환이 가능.
· 임의의 메서드나 필드도 추가 가능.
public enum Apple {
FUJI, PIPPIN, GRANNY_SMITH
}
public enum Orange {
NAVEL, TEMPLE, BLOOD
}
※ enum의 간단한 예
풍부한 enum 자료형을 만드는 법
· enum 상수에 데이터를 넣으려면 객체 필드(instance field)를 선언하고 생성자를 통해 받은 데이터를 그 필드에 저장하면 됨.
public enum Planet {
MERCURY (3.302e+23, 2.439e6),
VENUS (4.869e+24, 6.052e6),
EARTH (5.975e+24, 6.378e6),
MARS (6.419e+23, 3.393e6),
JUPITER (1.899e+27, 7.149e7),
SATURN (5.685e+26, 6.027e7),
URANUS (8.683e+25, 2.556e7),
NEPTUNE (1.024e+26, 2.477e7);
private final double mass; // 킬로그램 단위
private final double radius; // 미터 단위
private final double surfaceGravity; // m / s^2
private static final double G = 6.67300E-11;
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
surfaceGravity = G * mass / (radius * radius);
}
public double mass() {
return mass;
}
public double radius() {
return radius;
}
public double surfaceGravity() {
return surfaceGravity;
}
public double surfaceWeight(double mass) {
return mass * surfaceGravity; // F = ma
}
}
public class WeightTable {
public static void main(String[] args) {
Double earthWeight = 175d;
Double mass = earthWeight / Planet.EARTH.surfaceGravity();
for(Planet p : Planet.values()) {
System.out.printf("Weight on %s is %f%n", p, p.surfaceWeight(mass));
}
}
}
※ 풍부한 enum 자료형의 예
[참고] Effective Java
'프로그래밍 > Java' 카테고리의 다른 글
String.format (0) | 2020.01.25 |
---|---|
enum 1 (0) | 2018.01.02 |
쓰레드(Thread) 3 (0) | 2017.11.20 |
쓰레드(Thread) 2 (0) | 2017.11.04 |
쓰레드(Thread) 1 (0) | 2017.11.03 |
WRITTEN BY
- 김치치즈스마일
세계정복!