Java/[인프런 김영한 실전 자바 - 중급편]
[인프런 김영한 실전 자바 - 중급편] 열거형 - ENUM
h2boom
2024. 7. 19. 18:58
ENUM
- 문자열을 사용하는 경우 특정 상황에서 문제가 발생할 수 있다.
- 타입 안정성 부족 : 문자열은 오타가 발생하기 쉽고 유효하지 않은 값이 입력될 수 있다.
- ex) 만약 등급(GOLD, SILVER ...)에 대해서 입력받는 경우
GOLD를 소문자 gold / 오타로 인해 golld 등의 오타 및 유효하지 않은 값이 입력될 수 있다. - 이러한 실수들은 컴파일 시 오류 감지가 불가하다.
- ex) 만약 등급(GOLD, SILVER ...)에 대해서 입력받는 경우
- 데이터 일관성 : "GOLD", "gold", "Gold" 등 다양한 형식으로 문자열을 입력할 수 있기에 일관성이 떨어진다.
- String은 어떤 문자열이든 받을 수 있기 때문에 문법에 어긋나지 않는다.
- 이런 문제를 해결하기 위해서 특정 범위로 값을 제한해야한다.
- ex) "SIVER", "GOLD", "DIAMOND"라는 정확한 문자만 입력받을 수 있도록 범위를 제한해야 한다.
- 이런 문제를 해결하기 위해서 특정 범위로 값을 제한해야한다.
- 타입 안정성 부족 : 문자열은 오타가 발생하기 쉽고 유효하지 않은 값이 입력될 수 있다.
- static final String과 같이 문자열 상수를 만들어 사용하면 상수의 이름을 잘못 적을 시 컴파일 오류가 발생한다.
- 문자열 상수를 만들어 놓더라도 사용을 하지 않는다면 근본적인 문제가 해결되지 않는다!!
- 결국 이러한 근본적인 문제를 해결하기 위해서는 타입 안전 열거형 패턴을 사용해야 한다.
타입 안전 열거형 패턴 (Type-Safe Enum Pattern)
- enumeration (열거) : 어떤 항목을 나열하는 것으로 타입 안전 열거형 패턴을 사용하면 나열한 항목만 사용할 수 있다.
- String처럼 아무런 문자열이나 사용할 수 있는 것이 아닌 나열한 항목 범위 안에서만 사용할 수 있다.
- 타입 안전 열거형 패턴의 장점
- 타입 안정성 향상 - 정해진 객체만 사용할 수 있기 때문에 잘못된 값을 입력하는 문제를 방지할 수 있다.
- 특정 메소드에서 특정 열거형 타입의 값을 요구하는 경우 그 타입의 인스턴스만 전달할 수 있다.
- 데이터 일관성 - 정해진 객체만 사용하므로 데이터 일관성이 보장된다.
- 제한된 인스턴스 생성 - 사전에 정의된 몇 개의 인스턴스만 생성하고 외부에서는 이 인스턴스만 사용할 수 있도록 함으로 미리 정의된 값들만 사용하도록 보장한다.
- 타입 안정성 향상 - 정해진 객체만 사용할 수 있기 때문에 잘못된 값을 입력하는 문제를 방지할 수 있다.
- 타입 안전 열거형 패턴의 단점
- 직접 타입 안전 열거형 패턴을 구현하려면 유의해야할 점들이 많다.
=> 그래서 자바에서 ENUM Type 열거형을 제공한다.
- 직접 타입 안전 열거형 패턴을 구현하려면 유의해야할 점들이 많다.
열거형 - ENUM Type
- 열거는 일련의 명명된 상수들을 사용해서 코드 내에서 미리 정의된 값들의 집합을 나타낸다.
- 타입 안정성을 제공, 코드 가독성을 높이고 예상 가능한 값들의 집합을 표현하는데 사용된다.
public enum Grade {
BASIC, GOLD, DIAMOND
}
- 열거형 특징
- 열거형을 정의할 때 class 대신 enum을 사용한다.
- 원하는 상수의 이름을 나열한다.
- 열거형도 클래스다.
- 자동으로 java.lang.Enum을 상속받는다.
- 다른 클래스를 상속받을 수 없다. (다중 상속이 불가하기 때문)
- 외부에서 임의로 생성할 수 없다.
- static import를 사용해서 더 가독성 좋은 코드로 작성할 수 있다.
- 열거형은 인터페이스를 구현할 수 있다.
- 추상 메소드를 선언, 구현할 수 있다. (익명 클래스와 같은 방식을 사용한다.)
- 열거형(ENUM) 장점
- 타입 안정성 향상 : 사전에 정의된 상수들로만 구성되있기에 유효하지 않은 값이 입력될 수 없다.
- 간결성 및 일관성 : 코드가 간결해지고 데이터 일관성이 보장된다.
- 확장성: 새로운 것을 추가하고 싶을 때 ENUM에 새로운 상수를 추가하기만 하면 된다.
- ENUM의 주요 메소드
- values() : 모든 ENUM 상수를 포함하는 배열을 리턴
- valueOf() : 주어진 이름과 일치하는 ENUM 상수 리턴
- name() : ENUM 상수의 이름을 문자열로 리턴
- ordinal() : ENUM 상수의 선언 순서를 리턴
- ordinal()의 값은 사용하지 않는 것이 좋다.
값을 사용하다가 중간에 상수를 선언하는 위치가 변경되면 전체 상수의 위치가 모두 변경되기 때문에
- ordinal()의 값은 사용하지 않는 것이 좋다.
- toString() : ENUM 상수의 이름을 문자열로 반환 (오버라이딩 할 수 있다.)
- Arrays.toString()은 배열의 참조 값이 아닌 배열 내부 값을 출력할 때 사용한다.
출처: [인프런 김영한 실전 자바 - 중급편]
김영한의 실전 자바 - 중급 1편 강의 | 김영한 - 인프런
김영한 | 실무에 필요한 자바의 다양한 중급 기능을 예제 코드로 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을
www.inflearn.com