서로 관련된 상수를 편리하게 선언하기 위한 것
enum Command { EXIT, CREATE, LIST } //String형식으로 들어감
// <열거형이름> <상수>
class Command {
static final Command EXIT = new Direction("EXIT");
static final Command CREATE = new Direction("CREATE");
static final Command LIST = new Direction("LIST");
private String command;
private Command(String str){
this.command = str;
}
}
메소드 | 내용 |
---|---|
getDeclaringClass() | enum의 Class 객체를 반환 |
name() | enum의 이름을 문자열로 반환 |
ordinal() | enum에 정의된 순서를 반환 |
valueOf(String) | String과 일치하는 enum 반환 |
values() | enum의 요소들을 순서대로 배열로 반환 |
compareTo(E) | 지정된 객체의 순서를 비교. 지정된 객체보다 작은 경우 음의 정수, 동일하면 0, 크면 양의 정수 리턴 |
열거형 상수간의 비교시 '==' 연산자 사용가능 (equals보다 빠른성능)
그러나 비교연산자는 사용불가 (compareTo사용)
public class Main {
public static void main(String[] args) {
Command c = Command.EXIT;
System.out.println(c.getDeclaringClass());
System.out.println(c.name());
System.out.println(c.ordinal());
Command b = Command.valueOf("CREATE");
System.out.println(b);
System.out.println(c.compareTo(b));
}
}
(열거형 상수의 값 추가)
기본적인 인덱스 대신 멤버 변수를 두는것 ( 변수와 생성자를 추가해야함)
멤버는 여러개 가능
enum Command {
EXIT("exit"), CREATE("create"), LIST("list"), ELSE("");
private final String command;
Command(String str) {
this.command = str;
}
public String get() {
return command;
}
public static Command findBy(String command) {
for (Command commandType : values()) {
if (commandType.command.equals(command)) {
return commandType;
}
}
return ELSE;
}
}
enum Command {
EXIT("exit"), CREATE("create"), LIST("list"), ELSE("");
private final String command;
Command(String str) {
this.command = str;
}
public String get() {
return command;
}
public static Command getCommandType(String command){
return Arrays.stream(values())
.filter(commandType -> commandType.command.equals(command))
.findAny()
.orElse(ELSE);
}
}
enum Command {
EXIT, CREATE, LIST, ELSE;
private static final Map<String, Command> stringToEnum = new HashMap<String, Command>();
static {
stringToEnum.put("exit", EXIT);
stringToEnum.put("create", CREATE);
stringToEnum.put("list", LIST);
}
public String get(){
return stringToEnum.
}
public static Command findBy(String command) {
Command cm = stringToEnum.get(command);
if(cm==null) return ELSE;
else return cm;
}
}
public void CommandLineApplicationRun() throws IOException {
while (true) {
//String command = "";
bw.write("명령어를 입력해주세요. \n");bw.flush();
Command command = Command.findBy(br.readLine());
switch (command) {
case EXIT:
bw.write("프로그램을 종료합니다");
bw.flush();
bw.close();
return;
case CREATE:
bw.write("Voucher 타입 번호를 입력하세요.\n 1:FixedAmount 2:PrecentDiscount\n");
bw.flush();
command = Command.findBy(br.readLine());
if (!createSelect(command)) continue;
break;
case LIST:
Map<UUID, Voucher> voucherList = voucherService.getVouchers();
for (UUID uuid : voucherList.keySet()) {
Voucher voc = voucherList.get(uuid);
bw.write(voc.toString() + "\n");
bw.flush();
}
break;
default:
bw.write("유효하지 않은 명령어 입니다.\n");
bw.flush();
continue;
}
}
}
Boolen 사용코드
public class Booltest {
public static void main(String[] args) {
printGender(true);
printGender(false);
}
public static void printGender(boolean gender){
if(gender == true){
System.out.println("I am boy");
}
else if(gender == false){
System.out.println("I am girl");
}
}
}
Enum 사용코드
public enum Gender {
boy,girl
}
import static Gender.*;
public class Booltest {
public static void main(String[] args) {
printGender(boy);
printGender(girl);
}
public static void printGender(Gender gender){
if(gender == boy){
System.out.println("I am boy");
}
else if(gender == girl){
System.out.println("I am girl");
}
}
}