TIL

Enum 이해하기

류정근 2024. 5. 9. 10:03
enum!!! 이해라도 해보자

Enumd이 필요한 이유

String 타입은 어떤 문자열이든 입력 할 수 있기 때문에 문제가 발생할 상황이 많다.

이 문제를 타입 안전성 부족 문제 라고 부른다.

1. 값의 제한 부족: String으로 상태나 카테고리를 표현하면 잘못된 문자열을 실수로 입력할 가능성이 있다.(오타)

2. 컴파일 시 오류 감지 불가: 이러한 잘못된 값은 컴파일 시에는 감지되지 않고, 런타임에서만 문제가 발견된다(디버깅 어려움)

이런 문제를 해결하려면 특정 범위로 값을 제한해야한다.  예를 들어 어떤 머세드에서 String을 변수로 받는다면 어떤 문자열이든 받을 수 있기 때문에 자바 문법 관점에서는 어떤 문제도 없다.

Enumd이란

타입 안전 열거형 패턴 - Type-Safe Enum Pattern

enum(enumeration) : 열거,나열  "Entmeration"은 상수들의 집합을 정의하는 것을 의미한다.

enum의 가장 중요한 점은 타입 안전 열거형 패턴을 사용하면 나열한 항목만 사용할 수 있다는 것이 핵심이다.(다른것은 사용불가)  

자바의 enum은 타입 안정성을 제공하고, 코드의 가독성을 높이며, 예상 가능한 값들의 집합을 표현하는 데 사용된다.

※ 열거형은 switch 문에 사용할 수 있다는 장점도 가지고 있다. e

 

열거형(Enumd) 의 장점

타입 안정성 향상: 열거형은 사전에 정의된 상수들로만 구성되므로, 유효하지 않은 값이 입력될 수 없다.(컴파일오류)

간결성 및 일관성: 코드가 더 간결해지고 명확해지며 데이터의 일관성 보장

확장성: 새로운 등급 타입을 추가하고 싶을 때, Enum에 새로운 상수를 추가하기만 하면 된다.

'static import` 를 사용하면 더 읽기좋은 코드가 된다. ex) Grade.GOLD -> GOLD 로 사용 가능

 

Enum주요 메서드

values() : 모든 ENUM 상수를 포함하는 배열을 반환한다. ex) Grade[] values = Grade.values(); -> 배열에 저장

valueOf(String name); 주어진 이름과 일치하는 ENUM 상수를 반환한다.  ex) Grade gold = Grade.valueof("GOLD"); name(): ENUM 상수의 이름을 문자열로 반환한다.

ordinal(): ENUM 상수의 선언 순서(0부터 시작)를 반환한다.

toString(): ENUM 상수의 이름을 문자열로 반환한다. `name()` 메서드와 유사하지만, `toString()` 은 직접
오버라이드 할 수 있다.

※`ordinal()` 의 값은 가급적 사용하지 않는 것이 좋다. 왜냐하면 이 값을 사용하다가 중간에 상수를 선언하는 위
치가 변경되면 전체 상수의 위치가 모두 변경될 수 있기 때문이다.

열거형(Enum)정리

열거형은 `java.lang.Enum` 를 자동(강제)으로 상속 받는다.
열거형은 이미 `java.lang.Enum` 을 상속 받았기 때문에 추가로 다른 클래스를 상속을 받을 수 없다.
열거형은 인터페이스를 구현할 수 있다.
열거형에 추상 메서드를 선언하고, 구현할 수 있다.

 

실제 사용 후기

Enum을 정리하게 된 계기: 팀과제를 진행하던 중 .템플릿으로 나온 코드에서 약간 비효율적으로 보이는 코드를 발견!!

한번 고쳐보자!!

 

https://winner7789.tistory.com/29

 

수강생 관리 프로그램(Java, 팀과제)

이번에 맡은 역할은 코드의 베이스를 까는 부분또 처음 맡아보는 역할에 살짝 갈피를 못잡고 있었지만 검색도 하고, 다른 팀에서 뭐하나 살짝 구경도 하며 갈피를 잡았다.우선 우리팀이 사용할

winner7789.tistory.com

 

여기서 사용후기 정리

 

이것이 완성 코드

'TIL' 카테고리의 다른 글

정적 컨테츠, MVC, API  (1) 2024.05.16
팀프로젝트 KPT  (0) 2024.05.13
예외처리하기  (0) 2024.05.01
상속과 오버라이딩(Overriding)  (1) 2024.04.30
인터페이스  (0) 2024.04.29