출간일 2016년 11월 28일
판매가 2000원
형태 ebook
이 책의 모든 내용은 http://ehpub.co.kr에 공개하고 있습니다.
학습에 도움이 되시면 ebook을 구입하여 소장하시면 감사하겠습니다.
언제나 휴일 출판사의 수익금의 대부분은 아프리카에 기부하고 있습니다.
6. 1 열거형
Java 언어에서는 사용할 수 있는 값의 종류를 미리 정하는 열거형을 제공하고 있습니다. 예를 들어 성별을 표현한다고 할 때 int 형식이나 Boolean 형식 혹은 문자열을 사용하여 표현할 수도 있을 것입니다. 하지만 이는 가독성이나 신뢰성에서 문제를 유발할 수 있습니다.
예를 들어 int 형식 변수에 1이라는 값이 들어있을 때는 여성, 2는 남성, 0은 결정하지 않은 값으로 사용하기로 정한다고 가정합시다. 그런데 이 때 개발자의 실수에 의해 해당 변수의 값을 3으로 설정한다면 논리적 버그를 만드는 것입니다.
이 때 성별 데이터를 표현하기 위한 열거형을 정의하여 사용하면 논리적 버그를 미연에 방지할 수 있습니다.
[접근자] enum 형식명{
값,...
}
다음은 성별 형식을 열거형 Gender로 정의하여 사용한 예제입니다.
//성별을 열거형으로 정의 public enum Gender { NoGender, Female, Male } |
//성별 형식을 열거형 Gender로 정의하여 사용한 예 import java.util.Scanner; public class Program { static Scanner scanner = new Scanner(System.in); public static void main(String[] args){ System.out.println("성별 입력 (1:Female 2:Male:);"); int value = scanner.nextInt(); Gender gender = Gender.NoGender; switch(value){ case 1: gender = Gender.Female; break; case 2: gender = Gender.Male; break; default: System.out.println("입력 오류"); break; }
System.out.println(gender.ordinal()); System.out.println(gender.toString()); } } |
성별 입력 (1:Female 2:Male:); 2 2 Male |
[소스 6.1] 성별 형식을 열거형 Gender로 정의하여 사용한 예
위의 예제에서 열거형의 멤버 ordinal() 메서드를 호출하면 몇 번째 나열한 값인지 확인할 수 있습니다. 주의할 점은 맨 앞에 열거한 표현이 0입니다. 그리고 toString 메서드는 열거형에 표현한 값(NoGender, Female, Male)을 문자열로 반환합니다.
만약 열거형을 정의할 때 나열하는 표현에 개발자가 원하는 값으로 매핑할 수도 있습니다. 이 때는 열거형에 나열하는 표현을 “표현=(매핑 값)”을 지정하며 접근 지정하지 않은 생성자와 매핑할 값을 기억할 멤버를 캡슐화하여 사용할 수 있습니다. 이 때 멤버 필드 값을 접근할 수 있는 접근자 메서드를 제공하면 사용이 편합니다.
[접근자] enum 형식명{
값(매핑 값),...;
[final] int 멤버 필드명;
생성자(int 변수명){
멤버 필드명 = 변수명;
}
[접근자 메서드]
}
다음은 게임에 사용할 상수를 열거형에 정의하는 예제입니다.
//열거형의 표현에 매핑 값을 설정 public enum GameConst { MinHP(0), MaxHP(100),MinIQ(0),MaxIQ(300); final int value;
GameConst(int value){ this.value = value; } public int GetValue(){ return value; } } |
//열거형의 표현에 매핑 값을 설정 예 public class Program { public static void main(String[] args){ System.out.println("toString() 메서드 호출 결과"); System.out.println(GameConst.MinHP.toString()); System.out.println(GameConst.MaxHP.toString()); System.out.println(GameConst.MinIQ.toString()); System.out.println(GameConst.MaxIQ.toString());
System.out.println("ordinal() 메서드 호출 결과"); System.out.println(GameConst.MinHP.ordinal()); System.out.println(GameConst.MaxHP.ordinal()); System.out.println(GameConst.MinIQ.ordinal()); System.out.println(GameConst.MaxIQ.ordinal());
System.out.println("GetValue() 메서드 호출 결과"); System.out.println(GameConst.MinHP.GetValue()); System.out.println(GameConst.MaxHP.GetValue()); System.out.println(GameConst.MinIQ.GetValue()); System.out.println(GameConst.MaxIQ.GetValue()); } } |
toString() 메서드 호출 결과 MinHP MaxHP MinIQ MaxIQ ordinal() 메서드 호출 결과 0 1 2 3 GetValue() 메서드 호출 결과 0 100 0 300
|
[소스 6.2] 열거형 표현에 매핑 값을 설정한 예
'언어 자료구조 알고리즘 > 디딤돌 Java 언어 Part1' 카테고리의 다른 글
[Java] 6.2.4 String 클래스 멤버 중에 판별에 사용하는 멤버 메서드 (0) | 2016.11.17 |
---|---|
[Java] 6.2.3 String 클래스의 비교에서 자주하는 실수 (0) | 2016.11.17 |
[Java] 6.2.2 String 클래스의 비교 (0) | 2016.11.16 |
[Java] 6.2.1 String 클래스의 생성자 (0) | 2016.11.16 |
[Java] 6. 2 String 클래스 (0) | 2016.11.16 |
[Java] 6. 배열 및 기본 문법들 (0) | 2016.11.15 |
[Java] 5. 6 모든 클래스의 super 클래스인 Object (0) | 2016.11.14 |
[Java] 5.5 안전한 하향 캐스팅을 위한 예약어 instanceof (0) | 2016.11.14 |
[Java] 5.4 인터페이스 (0) | 2016.11.14 |
[Java] 5.3 추상화 (0) | 2016.11.14 |