본문 바로가기
개발언어/JAVA

Java 개발을 위한 열거타입(enum)

by 이엘리야 2023. 8. 13.

안녕하세요.

이번 시간에는 참조자료형인

열거 타입(enum)에 대해 알아보겠습니다.

 

열거 타입은

한정된 상수값들의 집합을 저장하는 타입으로

상수(값) 형태로 값을 지정할 수 있습니다.

 

이번 포스팅은 짧게 진행해 보도록 하겠습니다.

 

열거 타입은 enum 파일로 정의할 수 있고, 클래스 파일 내에서 정의 할 수도 있습니다.

 

간단하게 예를 한번 들어보도록 하겠습니다.

Enum이라는 클래스를 만든 후 그 안에 main 메서드를 만들어 줬습니다.

우선 첫 번째로 클래스 파일 내에 정의해서 불러오는 방법을 설명하겠습니다.

Enum 클래스 위쪽에 enum Test라고 하는 열거 타입을 생성해 줍니다.

 

그 후 main 메서드 안에서 Test라는 enum 배열 객체를 rainbow라는 변수명으로 만들어주고

Test.values(); 를 적어주는데

여기서 values()는 열거체의 모든 요소를 배열로 반환시켜주는 메서드입니다.

앞서 Test[] 라고 만든 이유도 배열을 받아주기 위함입니다.

 

이렇게 만들어 준 후 rainbow를 foreach문으로 출력해 보면

이렇게 열거타입(enum) 안에 있는 값을 불러오는 것을 볼 수 있습니다.

enum에는 values() 이외에도 valueOf(), ordinal() 메서드가 있는데 각각 의미를 보게 되면

values() : 거체의 모든 요소를 배열로 반환시켜주는 메서드

valueOf() : 전달된 문자열과 일치하는 열거체 상수를 반환하는 메서드

ordinal() : 해당 열거체 상수가 정의된 순서 index를 반환하는 메서드

이렇게 3가지 메서드가 있으며 각각 실습해 보고 enum 파일을 만들어서

똑같이 한번 진행해 보도록 하겠습니다.

다음으로 알아볼 것은 valueOf() 메서드입니다.

이렇게 valueOf("YELLOW")를 적어 YELLOW만을 반환받을 수도 있습니다.

 

다음은 ordinal() 메서드에 대해 알아보도록 하겠습니다.

이렇게 YELLOW 가 몇 번째 인덱스에 있는지 확인하여 출력해 줍니다

RED ORANGE YELLOW....
0 1 2...

인덱스는 0부터 시작하니 알아둡시다!

이렇게 enum 열거타입은

요소들을 명명한 값으로 집합을 이루는 자료형이며

특징으로는

enum을 비교할 때는 값뿐만 아니라 타입도 비교하며

 enum의 상수값이 재정의 되어도 다시 컴파일할 필요가 없다는 것입니다.

 

지금은 같은 클래스 파일 안에서 enum을 선언했지만

따로 enum 파일을 만들 수도 있습니다.

Ctrl + N을 눌러 enum 이라고 검색 후 파일을 만들어 보겠습니다.

이렇게 작성해 주시고 다시 Ctrl + N 을 통해 EnumPrint라고 클래스 파일을 만들어 주도록 하겠습니다.

이런 식으로도 사용할 수 있습니다.

또한 열거 상수 안에 값을 지정해 줄 수 있는데

이렇게 열거상수 안에 값을 지정하게 되면

지정할 변수와 생성자를 추가해줘야 합니다.

뒤에서 생성자와 getter, setter에 대해서 자세히 설명할 예정이니

이렇게도 사용할 수 있구나 하고 눈팅만 해주세요 :)

아까 만들었던 EnumTest enum 파일 코드 구성이 이렇게 변경되었습니다.

이제 EnumPrint로 넘어가 보겠습니다.

아까 작성한 코드 밑으로 이렇게 선언해 주세요.

그리고 출력해 보면

이렇게 5라고 출력되는 것을 볼 수 있습니다.

위에 EnumTest 파일에서 BLUE(5)라고 준 게 보이실 텐데

상수값이 5가 주어졌으므로 출력값이 5가 된 것을 보실 수 있습니다.

 

도대체 열거 타입을 왜 쓰는 건가 싶으신 분들이 있을 거 같아서

왜 사용해야 하는지에 대해 다른 블로그의 내용을 발췌해 왔습니다.

 

클래스 내부에 상수를 정의하게 되면 적은 양의 상수일 경우에는 문제가 없지만

같은 방식으로 상수를 정의하게 될 경우 네임 충돌이 발생할 수 있고 가독성이 낮아지게 됩니다.

 

그렇기에 열거형 Enum을 사용하게 되면 코드의 질이 향상되며

인스턴스 생성과 함께 상속을 방지하여 타입 안정성이 보장되고

키워드 Enum을 사용하기에 구현 의도가 명확해진다고 설명하고 있습니다.

 

즉 코드 구성에는 기존 클래스를 사용해도 무방하다고 볼 수 있지만

깔끔하고 가독성을 중요시한다면 Enum을 사용하라고 나와있습니다.

 

선택은 여러분들의 몫입니다!

 

이렇게 Enum 열거 타입에 대해 알아봤는데

이해가 좀 되셨나요?

 

더 궁금하신 점이 있으시면

댓글을 통해 질문해 주세요!

 

다음은 String 참조 자료형에 대해 알아보도록 하겠습니다.

 

감사합니다 :)