💡
enum
이란enumerated type
의 줄임말로열거형
이라고 부르기도 하는데, 컴퓨터 프로그래밍에서 열거형(enumerated type, enumeration)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다.
이해하기 쉽게 말하자면, ‘고정된 상수들의 집합’이라고 볼 수 있겠다.
(boolean 자료형의 false와 true도 값이 미리 정의된 열거형이라고 볼 수 있다는 점!)
public enum Company {
// 필드
SK("에스케이"),
LG("엘쥐"),
KT("케이티"),
SAMSUNG("삼성"),
APPLE("애플");
// 변수
private final String value;
// 생성자
Company(String value) {
this.value = value;
}
// 메소드
public Stirng getValue() {
return value;
}
}
,
로 연결()
안에 상수의 값 입력private
접근제한자여야 함, 따로 적지 않아도 묵시적으로 private
임.private
생성자만 사용 가능하며 다른 패키지나 클래스에서 enum타입에 접근해서 동적을 값 지정 불가함.)name()
메소드와 같은 값을 반환하며, name()은 final로 선언된 메소드라 오버라이딩이 불가능하지만 toString()은 일반적인 Object 클래스의 메소드로 오버라이딩이 가능하다는 점에서 차이점이 있다.열거형 상수간의 비교는 ==
을 사용할 수 있다. equals()
가 아닌 ==
로 비교가 가능하다는 것은 그만큼 빠른 성능을 제공한다는 이야기이다. 하지만 <
, >
와 같은 비교 연산자는 사용할 수 없지만 compareTo()
는 사용이 가능하다.
아래와 같이 enum 클래스가 정의되어 있다고 생각해보자.
public enum Company {
// 필드
SK("에스케이"),
LG("엘쥐"),
KT("케이티"),
SAMSUNG("삼성"),
APPLE("애플");
// 변수
private final String value;
// 생성자
Company(String value) {
this.value = value;
}
// 메소드
public Stirng getValue() {
return value;
}
}
TestEnum 클래스에서 for문
을 사용한 예제이다.
public class TestEnum {
public static void main(String[] args) {
for(Company type : Company.values()) {
System.out.println(type.getValue());
// 에스케이, 엘쥐, 케이티, 삼성, 애플
}
System.out.println(Company.APPLE.getValue()); // 애플
}
}
👉🏻 values()
: enum에 선언된 상수 전부를 가져온다.
public class TestEnum {
public static void main(String[] args) {
for(Company type : Company.values()) {
System.out.println(type);
// SK, LG, KT, SAMSUNG, APPLE
}
System.out.println(Company.APPLE.ordinal()); // 4
}
}
👉🏻 ordinal()
: 해당 상수의 index 값을 출력한다.
TestEnum 클래스에서 switch문
을 사용한 예제이다.
public class TestEnum {
enum Company {SK, LG, KT, SAMSUNG, APPLE}
public static void main(String[] args) {
int test = 1;
if(test == 1) {
switchFt(Company.SAMSUNG);
}
}
public static void switchFt(Company company) {
switch(company) {
case SK :
System.out.println("SK입니다.");
break;
case LG :
System.out.println("LG입니다.");
break;
case KT :
System.out.println("KT입니다.");
break;
case SAMSUNG :
System.out.println("SAMSUNG입니다.");
break;
case APPLE :
System.out.println("APPLE입니다.");
break;
}
}
}
👉🏻 switch 문에 열거형을 사용할 땐 case문에 열거형 타입의 이름은 적지 않고 상수의 이름만 적어야 한다는 제약이 있다.
상수를 효과적으로 쓰기 위해 enum 사용
https://opentutorials.org/module/516/6091
p.196의 아래를 보자.
위를 보게 되면 enum 클래스 객체를 만드는 방법은 getInstance()
메소드다.
어디서 많이 본 패턴! 바로 싱글톤!
싱글톤을 가장 잘 만드는 방법이 enum!
https://velog.io/@mooh2jj/멀티스레드환경에서의-싱글톤-객체-그리고-enum
https://mine-it-record.tistory.com/204
https://eatnows.tistory.com/91
https://velog.io/@yongseok0419/상수-Constant-와-열거형-Enum#:~:text=· 변수와 마찬가지로 데이터를,는 대문자로 사용한다.
https://opentutorials.org/module/516/6091
https://velog.io/@mooh2jj/멀티스레드환경에서의-싱글톤-객체-그리고-enum