컬렉션_열거형(enum)

김예인·2023년 5월 2일

백엔드 공부일지

목록 보기
14/43
post-thumbnail

📚 열거형(enum)

서로 연관된 상수 (변하지 않는 값) 들의 집합

< 전역변수로 상수 정의 : public static final >

public static final 타입 전역변수 =;

(전역변수 : 어디서나 접근할 수 있는 변수)

🙋‍♀️ 수많은 상수를 정의하면?

public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int FALL = 3;
public static final int WINTER = 4;

public static final int SPRING = 2;

🙋‍♀️ 근데, 상수명 중복으로 컴파일 에러가 나면 어떡해? 그럼 인터페이스로 구분하자!

interface Season {
	int SPRING = 1. SUMMER = 2, FALL = 3, WINTER = 4;
}

interface Frameworks {
	int DJANGO = 1, SPRING = 2, NEST = 3, EXPRESS = 4;
}

🙋‍♀️ 어? 그랬더니, 타입 안정성이라는 새로운 문제가 생긴다!

if (Seasons.SPRING == Frameworks.SPRING) 가 인정되는 타입 안정성 문제

🤦‍♀️ 그렇다고 클래스로 묶어 각각 객체로 생성하면 코드가 너무 길고, 사용자 정의 타입이기 때문에 switch문 사용 불가...

class Seasons {
    public static final Seasons SPRING = new Seasons();
    public static final Seasons SUMMER = new Seasons();
    public static final Seasons FALL   = new Seasons();
    public static final Seasons WINTER = new Seasons();
}

💡 enum 을 이용한 상수 정의

enum 열거형이름 { 상수명1, 상수명2, 상수명3, ...}

[열거형이름.상수명] 으로 접근
  • 대문자 작성이 관례
  • 자동적으로 0부터 시작하는 정수값이 할당

💻 예시

enum Seasons { SPRING, SUMMER, FALL, WINTER }
enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }

💡 열거형 메서드

name() : 열거 객체가 가지고 있는 문자열(상수 이름과 동일)을 리턴

ordinal() : 열거 객체의 순번(0부터 시작)을 리턴

compareTo(비교값) : 주어진 매개 값과 비교해서 순번 차이를 리턴

valueOf(String name) : 주어진 문자열의 열거 객체를 리턴

values() : 모든 열거 객체들을 배열로 리턴
profile
백엔드 개발자 김예인입니다.

0개의 댓글