안녕하세요.
오늘은 Java의 Enum에 대해서 공부해보겠습니다.
Enum의 개념
Enum이란 Enumeration의 약자로 열거형 타입이라고 합니다.
Enum은 서로 관련있는 상수들을 모아서 하나의 타입으로 정의하고 활용하는 데에 사용됩니다.
예를 들어 요일이나 계절처럼 한정된 값들만 가지는 데이터를 다룰 때 유용합니다.
Java에서는 JDK 1.5부터 enum 키워드를 통해 열거형 타입을 정의할 수 있으며 클래스처럼 다룰 수 있는 객체입니다.
Enum의 특징
Enum은 단순한 상수의 나열이 아니라 클래스 형태로 동작하며 타입 안정성과 객체 구조를 함께 제공하는 열거형 타입입니다.
| 특징 | 설명 |
| 타입 안정성 | Enum으로 정의된 값 외에는 사용할 수 없기 때문에 잘못된 값이 들어오는 것을 컴파일 단계에서 차단할 수 있습니다. |
| 싱글톤 패턴 | Enum 상수는 하나의 인스턴스만 존재하는 싱글톤 형태로 생성되며 항상 동일한 인스턴스를 사용합니다. 따라서 == 연산자를 사용하여 안전하게 비교할 수 있습니다. |
| 객체 기반 구조 | Enum은 일반 클래스처럼 필드, 생성자, 메소드를 가질 수 있습니다. |
| 내장 메소드 제공 | 모든 Enum은 java.lang.Enum을 상속받기 때문에 별도의 구현 없이 다양한 내장 메소드를 사용할 수 있습니다. |
| 데이터와 로직 결합 | 단순히 값을 표현하는 것을 넘어 해당 값과 관련된 로직을 Enum 내부에 정의할 수 있어 코드의 응집도를 높일 수 있습니다. |
Enum의 장점
Enum은 코드의 안정성과 가독성을 높이고, 상수와 관련된 로직을 한 곳에서 관리할 수 있도록 도와주는 기능입니다.
| 장점 | 설명 |
| 안정성 확보 | Enum으로 정의되지 않은 상수를 사용하거나 오타가 발생했을 경우, 실행 전에 컴파일 단계에서 오류를 확인할 수 있습니다. |
| 코드 가독성 향상 | 숫자나 문자열 대신 STATUS.READY, STATUS.SUCCESS와 같이 의미가 명확한 값을 사용할 수 있어 코드의 가독성이 좋아집니다. |
| 응집도 향상 | 상태값과 관련된 데이터나 메소드를 Enum 클래스 내부에 함께 정의할 수 있어 코드의 응집도를 높일 수 있습니다. |
| 리팩토링 용이 | 상수 이름이나 데이터를 변경해야 할 경우 Enum 클래스만 수정하면 되므로 유지보수와 리팩토링이 편리합니다. |
| 생산성 향상 | IDE의 자동완성 기능을 통해 사용 가능한 Enum 상수를 쉽게 확인하고 사용할 수 있어 개발 생산성이 향상됩니다. |
Enum의 내장 메소드
Enum은 java.lang.Enum 클래스를 상속받기 때문에 다양한 기본 메소드를 제공합니다.
| 메소드 | 설명 |
| values() | Enum에 정의된 모든 상수를 배열 형태로 반환합니다. |
| valueOf(String name) | 문자열을 Enum 상수로 변환합니다. |
| name() | Enum 상수의 이름을 문자열로 반환합니다. |
| ordinal() | Enum 상수가 선언된 순서를 정수(index)로 반환합니다. |
마무리정리
이번 글에서는 Enum에 대해서 공부하였습니다.
Enum은 단순히 상수를 나열하는 기능을 넘어 타입 안정성과 객체 지향 구조를 함께 제공하는 중요한 기능입니다.
이를 통해 잘못된 값 사용을 컴파일 단계에서 방지할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.
또한 Enum은 필드와 메소드를 함께 정의할 수 있기 때문에 단순한 상수 관리뿐만 아니라 상태 값과 관련된 로직을 하나의 구조 안에서 관리할 수 있다는 장점이 있습니다.
따라서 상태값, 코드값, 유형과 같이 정해진 값들을 관리해야 하는 경우 Enum을 활용하면 보다 안정적이고 명확한 코드를 작성할 수 있을 것 같습니다.
읽어주셔서 감사합니다!
참조
'Language > JAVA' 카테고리의 다른 글
| [JAVA] 스택(Stack) (0) | 2023.02.28 |
|---|---|
| [JAVA] 배열의 복사(Array Copy) (0) | 2020.08.01 |
| [JAVA] 배열의 정렬(Array Sort) (0) | 2020.07.19 |
| [JAVA] 배열(Array) (0) | 2020.06.17 |
| [JAVA] 반복문 (0) | 2020.06.14 |
