천천히 빛나는

Java 기초 : Enum과 객체 배열 본문

JAVA/JAVA

Java 기초 : Enum과 객체 배열

까만콩 •ᴥ• 2023. 7. 30. 10:39

열거 타입 (enum)

상수(constant)의 집합 클래스

public enum Subjects {
    // 작성된 순서대로 0부터 값이 자동 부여
    JAVA, // 0, Subjects Subjects.JAVA = new Subject();
    ORACLE, // 1
    JDBC, // 2
    HTML, //3
    CSS, //4
    JAVASCRIPT // 5
}

enum 키워드를 활용하여 열거 타입을 선언할 수 있다.

JAVA, ORACLE, JDBC의 값들은 enum 타입의 인스턴스를 가지고 있고, Subject enum은 6개를 담고 있다

 

public class Subjects {
    // 정수 열거 패턴
    public final static int JAVA = 0;
    public final static int ORACLE = 1;
	...
}

enum이 등장하기 전에는 정수 열거 패턴을 사용해서 상수를 선언하였다

 

public class Application {
    public static void main(String[] args) {
        Subjects subjects1 = Subjects.JAVA;
        Subjects subjects2 = Subjects.ORACLE;

        if(subjects1 == subjects2){
            System.out.println("두 과목은 같은 과목입니다");
        } else  {
            System.out.println("두 과목은 다른 과목입니다");
        }

        System.out.println(subjects1 == Subjects.JAVA);
    }
}

System.out.println(Subjects.JAVA.toString());

toString을 사용해서 상수명을 출력할 수도 있다

Subjects[] arr = Subjects.values();
for(Subjects s : arr) {
    System.out.println(s);
}

value()를 이용하여 상수값 배열을 반환하고 이를 이용해 연속처리할 수 있다

위 코드에서는 for-each문을 사용하였다. 

for(변수 :배열) {}

 

 

public enum UserRole {
    /* Enum은 상수 하나하나가 인스턴스화 될 수 있다*/
    GUEST,
    CONSUMER,
    PRODUCER,
    ADMIN;
    
    UserRole() {
        System.out.println("기본 생성자 실행");
    }

    public String getNameToLowerCase() {
        return this.name().toLowerCase();
    }
}

name(): 이름을 string 형으로 이름 반환

toLowerCase(): 문자를 소문자로 변경

생성자는 default와 private으로만 설정가능하다 (단, 외부에서 호출을 불가능함)

enum 타입은 고정된 상수들의 집합으로 런타임이 아닌 컴파일 시에 모든 값이 결정되어 있어야 한다. 따라서 다른 클래스에서 enum 타입에 접근해 동적으로 생성자를 이용해 어떤 값을 전달해줄 수 없다. 생성자를 가질 경우에는 열거형 상수 선언 마지막에 세미콜론을 붙여야 한다.

public class Application {
    public static void main(String[] args) {
        UserRole admin = UserRole.ADMIN;
    }
}

하나에 접근하여도 Enum 개수만큼 인스턴스가 생성되어 생성자가 실행된다

 

 

public enum UserRole {
    /* Enum은 상수 하나하나가 인스턴스화 될 수 있다*/
    GUEST("게스트"),
    CONSUMER("구매자"),
    PRODUCER("판매자"),
    ADMIN("관리자");

    private final String description;
    
    UserRole(String description) {
        System.out.println("description: " + description);

        this.description = description;
    }

    public String getDescription() {
        return this.description;
    }
}

 

public class Application {
    public static void main(String[] args) {
        UserRole consumer = UserRole.CONSUMER;
        System.out.println(consumer.ordinal() + " " + consumer.name() + " " + consumer.getDescription());

        UserRole admin = UserRole.ADMIN;
    }
}

ordinal() : enum에서 몇번째인지 반환

최초 사용시에만 열거 타입의 인스턴스를 생성하고 이후에는 생성하지 않는 것을 알 수 있다

 

 

객체 배열

 

Example arr[] = new Example[2];
arr[0] = new Example();
arr[1] = new Example();

 

'JAVA > JAVA' 카테고리의 다른 글

Java 기초 : 정리본 (2)  (0) 2023.08.09
Java 기초 : 상속  (0) 2023.07.31
Java 기초 : 객체  (0) 2023.07.28
Java 기초 : 정리본 (1)  (0) 2023.07.27
Java 기초 : 배열  (0) 2023.07.27