1. enum이전의 상수 사용
1) 사용 배경
- 상수는 변하지 않는 값으로 변수의 반대편에 있음.
- Java5.0부터 생긴 기능
- 이전에 사용했던 패턴들을 유지하는 경우도 있으니 전 버전은 알고 가자
- int x(=변수) = 1(=상수)
2) 이전 버전 사용 예시
package chapter_12;
//public class _03_Enum {
// public static void main(String[] args) {
// /*
// 1. 사과
// 2. 복숭아
// 3. 바나나
// */
// int type = 1; // 상수에 대한 주석을 지운다면 무엇을 위한 코드인지 알 수 없음
// switch (type) {
// case 1:
// System.out.println(57);
// break;
// case 2:
// System.out.println(34);
// break;
// case 3:
// System.out.println(93);
// break;
// }
// }
//}
public class _03_Enum {
private final static int APPLE = 1; // 변수 자체를 이름을 지정해두면 상수에 대한 정보 바로 알 수 있음
private final static int PEACH = 2;
private final static int BANANA = 3;
public static void main(String[] args) {
int type = APPLE;
switch (type) {
case APPLE:
System.out.println(57 + " kcal");
break;
case PEACH:
System.out.println(34 + " kcal");
break;
case BANANA:
System.out.println(93 + " kcal");
break;
}
}
}
3) enum 사용 예시
package chapter_12;
// enum(열거형, enumerated type): 서로 연관된 상수들의 집합
/*
class Fruit {
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
}
*/
enum Fruit { // 여기서의 Fruit 는 class와 같음, 위의 클래스와 같은 의미
APPLE, PEACH, BANANA
}
/*
class Company {
public static final Company GOOGLE = new Company();
public static final Company APPLE = new Company();
public static final Company ORACLE = new Company();
}
*/
enum Company { // 위의 클래스와 같은 의미
GOOGLE, APPLE, ORACLE
}
public class _05_Enum3 {
public static void main(String[] args) {
Fruit type = Fruit.APPLE;
switch (type) {
case APPLE:
System.out.println(57 + " kcal");
break;
case PEACH:
System.out.println(34 + " kcal");
break;
case BANANA:
System.out.println(93 + " kcal");
break;
}
}
}
4) enum 사용의 효과
- 코드가 단순해진다.
- 인스턴스 생성과 상속을 방지한다.
- 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.
- 즉, 열거이기 때문에 위치값도 부여받으면서도 상수가 제한사항 이외의 데이터타입이어도 상관 없음
5) enum과 생성자
- enum은 사실상 class와 같은 위계이기 때문에 생성자를 가질 수 있음
package chapter_12;
// enum(열거형, enumerated type): 서로 연관된 상수들의 집합
/*
class Fruit {
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
}
*/
enum Fruit { // 여기서의 Fruit 는 class 와 같음, 위의 클래스와 같은 의미
APPLE("red"), PEACH("pink"), BANANA("yellow"); // 괄호 안 색깔은 생성자가 호출 할 색 정보 명시
private String color; // 필드값도 가질 수 있음, 여기서는 private 으로 사용자가 직접 변수를 수정하는 것을 막음
public String getColor() { // enum 은 클래스이기 때문에 메소드도 가질 수 있음
return this.color;
}
Fruit(String color) { // enum 은 클래스이기 때문에 생성자를 가질 수 있음
System.out.println("Call Constructor " + this);
this.color = color; // 좌항은 필드값(전역변수), 우항은 매개변수(지역변수) 생성자 괄호 안(String color)를 지칭
}
}
/*
class Company {
public static final Company GOOGLE = new Company();
public static final Company APPLE = new Company();
public static final Company ORACLE = new Company();
}
*/
enum Company { // 위의 클래스와 같은 의
GOOGLE, APPLE, ORACLE
}
public class _05_Enum3 {
public static void main(String[] args) {
Fruit type = Fruit.APPLE;
switch (type) {
case APPLE: // 57 kcal, color red
System.out.println(57 + " kcal, color " + Fruit.APPLE.getColor());
break;
case PEACH: // 34 kcal, color pink
System.out.println(34 + " kcal, color" + Fruit.PEACH.getColor());
break;
case BANANA: // 93 kcal, color yellow
System.out.println(93 + " kcal, color" + Fruit.BANANA.getColor());
break;
}
}
}
6) 열거형 활용
public class _05_Enum3 {
public static void main(String[] args) {
for (Fruit f : Fruit.values()) {
System.out.println(f);
}
}
}
- 열거형은 연관된 값들을 저장한다.
- 값들이 변경되지 않도록 보장한다.
- 자체가 클래스이기 때문에 내부에 생성자, 필ㄷ, 메소드를 가질 수 있어 단순 상수가 아니라 더 많은 역할을 할 수 있다.
'Development > JAVA' 카테고리의 다른 글
(Java) Chapter16. Generic (0) | 2023.02.04 |
---|---|
(Java) Chapter15. Reference (0) | 2023.01.29 |
(Java) Chapter13. Object (0) | 2023.01.23 |
(Java) Chapter12. 예외 (0) | 2023.01.23 |
(Java) Chapter11. 접근 제어자 (0) | 2023.01.17 |