언어 자료구조 알고리즘/디딤돌 Java 언어 Part1

[Java] 6.1 열거형

언제나휴일 2016. 11. 15. 16:59
반응형

출간일 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] 열거형 표현에 매핑 값을 설정한 예

반응형