상수 대신 열거 형을 사용하는 이유는 무엇입니까? 소프트웨어 디자인과 가독성 측면에서 더 나은
나는 내가 가지고있는 시나리오가 플레이어 유형을 ARCHER , WARRIOR그리고 sorcerer.
플레이어 유형에 대해 Player 클래스에서 무엇을 사용해야합니까?
상수 최종 정적 문자열 변수 또는 Enum ? 그리고 왜?
이유를 도와주세요.
상수 문자열 (또는 int값) 을 사용한다고 가정합니다 .
// Constants for player types
public static final String ARCHER = "Archer";
public static final String WARRIOR = "Warrior";
// Constants for genders
public static final String MALE = "Male";
public static final String FEMALE = "Female";
그러면 데이터 유형을 실제로 알지 못하여 잠재적으로 잘못된 코드가 생성됩니다.
String playerType = Constants.MALE;
열거 형을 사용하면 다음과 같이 끝납니다.
// Compile-time error - incompatible types!
PlayerType playerType = Gender.MALE;
마찬가지로 열거 형은 제한된 값 집합을 제공합니다.
String playerType = "Fred"; // Hang on, that's not one we know about...
vs
PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!
또한 Java의 열거 형에는 더 많은 정보가 연결될 수 있으며 동작도있을 수 있습니다. 모든면에서 훨씬 좋습니다.
열거 형은 필요한 입력 집합으로 제한하는 반면 상수 문자열을 사용하더라도 논리의 일부가 아닌 다른 문자열을 사용할 수 있습니다.
이렇게하면 실수하지 않고 데이터를 입력하는 동안 도메인 외부에 무언가를 입력 할 수 있으며 프로그램 가독성도 향상됩니다.
또한 원하는 경우 항상 열거 형을 문자열로 사용할 수 있습니다. 여기에 참조가 있습니다.
잘못된 값을 제공하지 못하게하는 것 외에도 사소 해 보일 수있는 열거 형의 또 다른 기능이 있지만 제 생각에는 매우 중요합니다. 최신 IDE는 열거 형에 대한 값을 자동으로 제안 할 수 있지만 문자열 상수의 가능한 값을 안정적으로 추론 할 수있는 방법은 없습니다 (Intellij IDEA는 후자를 수행하지만 JDK 클래스 및 인기있는 라이브러리에만 해당). 이는 새 API를 탐색 할 때 특히 유용합니다.
유형 안전을 위해 Enum을 사용하는 것이 좋습니다. 잘못된 값을 입력 할 수 없습니다. 그러나 안드로이드의 열거 형은 너무 많은 메모리를 차지하므로 대신 intdef를 사용해야합니다. 예제 및 설명은이 답변을 참조하십시오 .-
IntDef / StringDef 예제
가능한 경우 enum을 IntDef / StringDef로 대체하는 Android 소스 코드를 확인할 수도 있습니다. 전의. 보기.
열거 형 상수가 정말로 필요한 경우에만 열거 형을 사용하거나 모든 항목에 공통적 인 일부 추가 기능을 사용하는 것이 좋습니다.
물론 작성중인 애플리케이션 유형과 지원하려는 버전 및 장치에 따라 다릅니다.
그 이유는 열거 형이 항목의 인스턴스를 할당하기 때문에 오버 헤드를 추가하기 때문입니다. 안드로이드 플랫폼에는 최소 열거 형이 있고 거의 모든 상수가 최종 정적 정수 (View.GONE 등)라는 것을 알 수 있습니다.
'program story' 카테고리의 다른 글
| C # 함수의 매개 변수 또는 선택적 매개 변수에 기본값을 제공 할 수 있습니까? (0) | 2020.11.14 |
|---|---|
| Java 제네릭 void / Void 유형 (0) | 2020.11.14 |
| Visual Studio에 단위 테스트에 대한 코드 적용 범위가 있나요? (0) | 2020.11.14 |
| C 전처리기로 while 루프를 작성하는 방법은 무엇입니까? (0) | 2020.11.14 |
| 보호 된 인터페이스 멤버를 가질 수없는 이유는 무엇입니까? (0) | 2020.11.14 |