[Effective Java] 35. ordinal 메서드 대신 인스턴스 필드를 사용하라

2022. 10. 24. 22:36· BE/Java
목차
  1. 아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라
반응형

EFFECTIVE JAVA(이펙티브 자바)

 

이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다.


아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라

ordinal 메서드

  • 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응된다.
  • 모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째인지 위치를 반환하는 ordinal 메서드를 제공한다.
  • 위의 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal 메서드를 이용할 수 있는데 결론적으로 이는 위험하다.

 

ex1) ordinal을 잘못 사용한 코드

public enum Ensemble {
    SOLO, DUET, TRIO, QUARTET, QUINTET,
		SEXTET, SEPTET, OCTET, NONET, DECTET;

    public int numberOfMusicians() {
        return ordinal() + 1;
    }
}
  • 합주단의 종류를 연주자가 1명인 SOLO부터 10명인 DECTET까지 정의한 열거 타입이다.
  • 상수 선언 순서를 변경하면 numberOfMusicians가 오작동하며, 이미 사용 중인 정수와 값이 같은 상수는 추가할 방법이 없다. ex) 8중주 상수가 이미 있으니 똑같이 8명이 연주하는 복4중주는 추가할 수 없다.
  • 값을 중간에 비워둘 수도 없다. 12명이 연주하는 3중 4중주를 추가한다고 해보면 중간에 11명짜리 상수도 채워야 하는데, 11명으로 구성된 연주를 일컫는 말은 없다.
  • 열거 타입 상수에 연결된 값은 ordinal 메서드로 얻지 말고, 인스턴스 필드에 저장해야 한다.

 

 

 

ex 2) ordinal을 사용하지 않는 좋은 예

public enum Ensemble {
    SOLO(1),
    DUET(2),
    TRIO(3),
    QUARTET(4),
    QUINTET(5),
    SEXTET(6),
    SEPTET(7),
    OCTET(8),
    DOUBLE_QUARTET(8),
    NONET(9),
    DECTET(10),
    TRIPLE_QUARTET(12);

    private final int numberOfMusicians;

    Ensemble(int size) {
        this.numberOfMusicians = size;
    }

    public int numberOfMusicians() {
        return numberOfMusicians;
    }
}
  • Enum의 API문서에서 ordinal에 대해 “대부분 프로그래머는 이 메서드를 쓸 일이 없고, EnumSet과 EnumMap 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다.”라고 한다.
  • 위의 용도가 아니라면 절대 사용하지 말자.
반응형

'BE > Java' 카테고리의 다른 글

[Effective Java] 아이템 37. ordinal 인덱싱 대신 EnumMap을 사용하라  (1) 2022.10.25
[Effective Java] 아이템 36. 비트 필드 대신 EnumSet을 사용하라  (0) 2022.10.24
[Effective Java] 34. int 상수 대신 열거 타입을 사용하라  (0) 2022.10.21
[Effective Java] 33. 타입 안전 이종 컨테이너를 고려하라  (0) 2022.10.19
[Effective Java] 아이템 32. 제네릭과 가변인수를 함께 쓸 때는 신중하라  (1) 2022.10.18
  1. 아이템 35. ordinal 메서드 대신 인스턴스 필드를 사용하라
'BE/Java' 카테고리의 다른 글
  • [Effective Java] 아이템 37. ordinal 인덱싱 대신 EnumMap을 사용하라
  • [Effective Java] 아이템 36. 비트 필드 대신 EnumSet을 사용하라
  • [Effective Java] 34. int 상수 대신 열거 타입을 사용하라
  • [Effective Java] 33. 타입 안전 이종 컨테이너를 고려하라
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
김멍목의 개발블로그개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 자바 개발자를 위한 코틀린 입문
  • 알고리즘 공부
  • JPA 공부
  • 알고리즘공부
  • 전산회계 2급 준비
  • 코테공부
  • JPA
  • 자바 테스팅 프레임워크
  • vue3 공부
  • 프로젝트로 배우는 Vue.js 3
  • MongoDB 공부
  • Java to Kotlin
  • 이펙티브 자바
  • MongoDB 기초부터 실무까지
  • Oracle
  • 자기개발
  • 자바공부
  • java 8
  • 자바 공부
  • 이펙티브자바
  • 코테 공부
  • 더 자바 Java 8
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 코틀린
  • 자기 공부
  • 자기공부
  • junit5
  • MongoDB with Node.js
  • Effective Java
  • 자기 개발

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[Effective Java] 35. ordinal 메서드 대신 인스턴스 필드를 사용하라
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.