Java/모두의 자바

Chapter 05-31 열거형(Enum)

계란💕 2022. 2. 6. 00:10

 

05-31.1 열거형이란?

  Def)열거형: 서로 관련있는 상수를 모아 집합으로 정의한 것이다.

  - 자바는 열거형을 이용해서 변수를 선언할 수 있다. 

  - 그리고 열거형을 변수형으로 사용한다. 

  - 열거형 형식 : enum 열거형이름 { 값1, 값2 }

  - enum은 참조 자료형에 속한다.

  - 열거형은 enum 형을 가진 형태의 클래스이다. ( String이라고 선언하지 않는다.)

 

 

05-31.2 열거형이 필요한 이유

  Ex) 상수로 정의할 때

<hide/>

package javaStudy;

public class EnumExam {

	public static final String MALE = "MALE";
	public static final String FEMALE = "FEMALE";
	
	public static void main(String[] args){
		String gender1;
		
		gender1 = EnumExam.MALE;
		gender1 = EnumExam.FEMALE;
		gender1 = "boy";
	}
}

  Note)

  - final: 상수 선언 시 필요한 키워드

  - 상수를 선언할 때 이름 전체를 대문자로 쓰는 것이 관례이다.  => MALE, FEMALE 
  - gender1은 MALE, FEMALE 값 중 하나만 가지게 하고 싶어한다. 

  - 이럴 때는 상수로 선언한 값을 이용하면 된다. 

    -> gender1 = 클래스명  + 마침표 + 상수로 선언해놓은 MALE or  FEMALE

    -> ex) gender = Gender.MALE => 정상, gender = "MALE" => 컴파일 에러

  - gender1에 boy라는 문자열을 넣으면 ?

    -> 원래 의도한 것은 gender1에 MALE이나 FEMALE 두 값 중 하나만 넣는 것이었다. 

    -> 그런데 boy를 넣어도 에러가 나지 않는다.

    -> boy도 string 값이므로 에러가 나지 않는다. 

  - 이런 문제를 막기 위해 열거형을 사용한다. 

    -> 열거형: enum 열거형이름 { 값1, 값2 }

 

 

05-31.3  열거형 사용법

  Ex)

<hide/>

package javaStudy;

public class EnumExam {

	public static final String MALE = "MALE";
	public static final String FEMALE = "FEMALE";
	
	public static void main(String[] args){
		String gender1;
		
		gender1 = EnumExam.MALE;
		gender1 = EnumExam.FEMALE;
	
		Gender gender2; // Gender형 변수로 gender2를 선언 
		gender2 = Gender.MALE;
		gender2 = Gender.FEMALE;

	}
	enum Gender{   // 열거형 선언
			MALE, FEMALE; 
	}	
}

  Note)

  - enum을 이용해서 열거형을 선언한다. 

  - 열거형 이름: Gender

  - enum의 중괄호 안에는 넣고 싶은 값인 MALE, FEMALE 두 값을 넣는다. 

  - 상수로 정의할 때는 string 형의 gender1이라고 선언했으나

  - 열거형으로 정의할 때는 enum인 Gender 자체가 자료형이 되므로 Gender으로 선언할 수 있다.

  - Gender gender2 를 선언하면 gender2에 gender.MALE 과 gender.FEMALE만 들어갈 수 있다. 

  - 따라서, 앞선 예제처럼 boy를 넣으면 컴파일 에러가 난다.

 

'Java > 모두의 자바' 카테고리의 다른 글

Chapter 06-33 this  (0) 2022.02.07
Chapter 06-32 생성자  (0) 2022.02.07
Chapter 05-30 변수의 스코프와 static  (0) 2022.02.05
Chapter 05-29 String 클래스의 메서드  (0) 2022.02.05
Chapter 05-29 String 클래스의 메서드  (0) 2022.02.05