빵 좋아하는 개발자🥐
[Java 자바] 열거형 상수(enum)의 기본 사용법 본문
⚾enum이란?
: 공통점을 가진 상수들의 집합
계절 혹은 요일처럼 특정한 카테고리로 묶을 수 있는 데이터들이 있다.
프로그래밍을 하다보면 상수를 static final 로 선언하는 경우가 많은데, 이는 상수의 갯수가 많아질수록 효율을 떨어뜨린다.
enum은 이를 보완하기 위해 만든 열거형 타입으로, 서로 연관된 상수들은 enum 클래스로 묶어주면 편리하다.
⚽enum 선언하기
enum Season{
봄, 여름, 가을, 겨울
}
타입의 이름은 직관적으로 짓는 것이 가독성이 좋다.
[ 봄, 여름, 가을, 겨울 ] 의 공통점은 계절이니 Season 타입으로 선언했다.
enum Season {
봄("spring"),
여름("summer"),
가을("autumn"),
겨울("winter");
private String value;
private Season(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
상수에 값을 할당하여 선언할 수도 있다.
이 경우에는 private 값에 대한 생성자, 그리고 상수의 값을 리턴할 getValue( ) 메서드를 생성한다.
🏀생성자는 private ? getValue( )는 public ?
enum을 처음 사용할 때 드는 의문이다.
또한 setValue( )는 없는 이유는 무엇일까?
enum은 상수의 집합이다. 따라서 enum 타입의 데이터들은 모두 상수이다.
그리고 상수는 static final 의 속성을 가진다.
👇
static == 컴파일시 static 메모리 영역에 올라감
final == 선언 이후 불변의 값
컴파일할 때 그 값을 이미 알고 있어야 하기 때문에 외부에서 따로 생성자를 호출해서 값을 할당할 필요가 없고,
외부에서 값을 변경할 수 없어야 하므로 생성자는 항상 private 이다.
(조금 더 자세한 내용을 알고 싶다면 👉 https://www.nextree.co.kr/p11686/ )
마찬가지로 외부의 접근이 불필요하기 때문에 setValue( )도 당연히 불필요하다.
그렇다면 getValue( )는 왜 필요한지?
이것 역시 데이터에 직접 접근하지 않고 간접적으로 값을 가져오기 위함이다.
🎱enum 사용법
enum Gender {
men("남성"),
women("여성");
private String value;
private Gender(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
public class EnumTest {
public static void main(String[] args) {
System.out.println(Gender.men);
System.out.println(Gender.men.getValue());
}
}
[출력] 👇
값을 따로 할당하지 않은 경우 상수명이 그 값이 되므로, 상수명만 입력했다면 상수명이 그대로 출력된다.
값을 할당한 경우 getValue( ) 메서드를 사용해서 출력할 수 있다.
🏐enum 클래스 메서드 사용하기
1) name ( ) : 상수에 할당된 값을 알려준다.
enum Direction{
동쪽, 서쪽, 남쪽, 북쪽
}
public class EnumTest {
public static void main(String[] args) {
System.out.println(Direction.동쪽.name());
}
}
[출력] 👉 동쪽
2) ordinal( ) : 상수가 몇 번째로 선언되었는지 알려준다. 인덱스는 0부터 시작한다.
enum Direction{
동쪽, 서쪽, 남쪽, 북쪽
}
public class EnumTest {
public static void main(String[] args) {
System.out.println(Direction.동쪽.ordinal());
}
}
[출력] 👉 0
3) values( ) : 해당 타입 객체들을 배열 형태로 반환한다.
enum Direction{
동쪽, 서쪽, 남쪽, 북쪽
}
public class EnumTest {
public static void main(String[] args) {
Direction[] directions = Direction.values();
for(Direction direction : directions) {
System.out.println(direction);
}
}
}
[출력] 👇
'Programming > JAVA' 카테고리의 다른 글
[Java 자바] 생성자(Construnctor) 의미와 사용법 (0) | 2023.09.13 |
---|---|
[Java 자바] 문자배열을 문자열로 출력하기(Char[] -> String) / String.valueOf( )와 Arrays.toString( )의 차이 (0) | 2023.08.18 |
[Java 자바] LocalDate, LocalTime, LocalDateTime 사용법 (0) | 2023.08.13 |
[Java 자바] Calendar로 날짜와 시간 다루기 (현재 날짜 구하기/날짜 설정하기) (0) | 2023.08.12 |
[Java 자바] 현재 날짜와 시간 알아내기, 원하는 형식으로 출력하기 (Date, SimpleDateFormat 클래스) (0) | 2023.08.12 |