일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ChatGPT
- firebase
- PostView
- 구글알고리즘
- sql연결
- git사용자등록
- 구글애널리틱스
- Polylang
- URLSearchParams
- 데이터베이스
- 구글
- 워드프레스
- Thymeleaf
- GA4
- mysql-select
- 리액트오류
- 조건판단문
- 중첩라우팅
- useEffect
- White HAT
- 구글바드
- router
- 리액트오류해결
- web-vitals
- wp_post
- useNavigate
- 플러그인
- path variable
- useLocation
- SEO
- Today
- Total
개발천재
[JAVA] 열거형 클래스 Enum(enumeration type) 본문
Enum : 상수(변하지 않는 고정 값)들의 집합
Enum 개념 정리
enum(열거형)은 서로 연관된 여러 개의 상수 값을 그룹으로 묶어 관리하는 데이터타입을 말한다. 일반적으로 상수를 선언하기 위해 final static을 사용하는데 상수가 여러개인 경우 상수를 따로 관리하면 타입 안정성이 보장되지 않고, 가독성이 떨어진다.
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
final static보다 enum을 사용하게 되면 코드의 가독성과 안정성이 향상된다.
예를 들어, 요일(월일), 계절(봄겨울)처럼 변하지 않는 고정된 값들을 enum으로 정의하면 가독성이 좋아지고, 실수로 잘못된 값을 사용할 가능성이 줄어든다. 자바에서 enum을 선언하는 방법은 enum Season { SPRING, SUMMER, FALL, WINTER }처럼 사용하며, 각 값은 자동으로 상수처럼 동작한다. 이를 통해 Season.SPRING처럼 의미 있는 이름으로 값을 다룰 수 있고, switch문과 함께 활용하면 코드가 더욱 간결해진다.
✔ values(), valueOf(), ordinal() 등의 메서드를 활용 가능
✔ 멤버 변수 & 메서드를 추가하여 각 상수에 대한 추가 정보를 저장 가능
✔ switch문, EnumMap, 인터페이스와 함께 사용하면 더욱 강력함
Enum 사용 방법
enum은 기본적으로 class처럼 동작하며, 내부적으로 final static 상수들을 포함하고 있다.
// 기본 선언 방법
enum 열거체이름 { 상수1이름, 상수2이름, ... }
enum Season{ SPRING, SUMMER, AUTUMN, WINTER }
사용 예시
public enum Language {
JAVA("Java - 객체지향 언어"),
PYTHON("Python - 쉬운 문법"),
JAVASCRIPT("JavaScript - 웹 개발"),
C("C - 시스템 프로그래밍"),
RUBY("Ruby - 간결한 문법");
private final String description;
Language(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
enum을 사용하면 값을 비교할 때 == 비교 연산자를 사용할 수 있는데 문자열과 비교하는 것보다 안전하다.
public class EnumExample {
public static void main(String[] args) {
Day today = Day.WEDNESDAY;
System.out.println("오늘은 " + today); // 출력: 오늘은 WEDNESDAY
}
}
Enum의 주요 기능
1) values()
values() 는 모든 Enum의 값 가져와 배열로 반환한다.
for (Day d : Day.values()) {
System.out.println(d);
}
// 출력
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
2) valueOf() - 문자열을 Enum으로 변환
대소문자 일치해야 함! ("friday" → 오류 발생)
Day day = Day.valueOf("FRIDAY");
System.out.println(day); // 출력: FRIDAY
3) ordinal() - Enum의 순서(인덱스)
ordinal()은 Enum이 선언된 순서를 반환 (0부터 시작)
System.out.println(Day.MONDAY.ordinal()); // 출력: 0
System.out.println(Day.FRIDAY.ordinal()); // 출력: 4
Enum에 멤버 변수 & 메서드 추가
enum은 단순한 상수 집합이 아니라 변수, 생성자, 메서드도 포함할 수 있다.
public enum Language {
JAVA("객체지향 언어"),
PYTHON("쉬운 문법"),
JAVASCRIPT("웹 개발"),
C("시스템 프로그래밍");
private final String description; // 설명 저장
// 생성자 (enum은 private 생성자만 가능)
Language(String description) {
this.description = description;
}
// 설명을 반환하는 메서드
public String getDescription() {
return description;
}
}
enum에 필드를 추가하면 각 상수별로 고유한 값을 설정할 수 있다.
public class EnumExample {
public static void main(String[] args) {
Language lang = Language.JAVA;
System.out.println(lang + " : " + lang.getDescription());
// 출력: JAVA : 객체지향 언어
}
}
Enum과 switch 문
enum을 switch에서 사용하면 가독성이 좋고 유지보수가 쉬워진다.
public class EnumSwitchExample {
public static void main(String[] args) {
Day today = Day.WEDNESDAY;
switch (today) {
case MONDAY:
System.out.println("월요일입니다.");
break;
case WEDNESDAY:
System.out.println("수요일입니다.");
break;
case FRIDAY:
System.out.println("금요일입니다.");
break;
default:
System.out.println("그 외의 요일입니다.");
}
}
}
Enum을 Map에서 Key로 사용
EnumMap은 enum을 키로 사용하는 고성능 맵이다.
import java.util.EnumMap;
public class EnumMapExample {
public static void main(String[] args) {
EnumMap<Language, String> langMap = new EnumMap<>(Language.class);
langMap.put(Language.JAVA, "Spring, Hibernate");
langMap.put(Language.PYTHON, "Django, Flask");
System.out.println(langMap.get(Language.JAVA)); // 출력: Spring, Hibernate
}
}
Enum을 인터페이스와 함께 사용
enum은 인터페이스를 구현할 수 있어 확장성이 높다.
interface Describable {
String getDescription();
}
public enum Language implements Describable {
JAVA("객체지향 언어"), PYTHON("쉬운 문법");
private final String description;
Language(String description) {
this.description = description;
}
@Override
public String getDescription() {
return description;
}
}
'개발 준비 > JAVA' 카테고리의 다른 글
[JAVA] Optional 개념과 주요 메서드 (2) | 2025.02.12 |
---|---|
[JAVA] 자바와 SQL 연결하기, JDBC (0) | 2024.12.30 |
[JAVA] getter와 setter (0) | 2024.12.12 |
[JAVA] for 반복문, 확장된 for문 (0) | 2024.12.06 |
[JAVA] 조건문 if / else / else if (0) | 2024.12.02 |