엔지니어로 가는 길

Java Enum도 하나의 클래스이다 본문

프로그래밍/Java

Java Enum도 하나의 클래스이다

탐p슨 2020. 1. 21. 15:57
728x90

Enum의 정의

Enum(enumerated type): 열거형, 서로 연관된 '상수'들의 집합

상수

상수란 변하지 않는 수를 뜻한다.

Enum도 클래스

변수와 메소드, 생성자를 가질 수 있다.

 

생활코딩 enum 강의 캡처

 

위의 코드는 아래의 코드와 같은 역할을 한다. 즉, Fruit에서 단순히 APPLE, PEACH, BANANA라고 나열했을 뿐인데 이름이 각각 APPLE, PEACH, BANANA인 Fruit 타입의 객체(instance)가 생성되는 것이다.

 

생활코딩 enum 강의 캡처

 

Enum은 서로 연관된 '상수'들의 집합이라고 했는데 웬 객체인가? 객체들을 보면 final이라는 키워드가 붙어 있다. 즉, 초기화 된 이후에 변경이 불가능하다는 뜻이다. 따라서 이들은 앞으로 변하지 않음으로 상수라고 할 수 있다.

Enum의 특징

Enum의 생성자는 반드시 package-private 또는 private이어야 한다. 사용자가 Enum 생성자를 직접 호출할 수 없다.

 

Enum은 아래와 같이 switch문에서 사용할 수 있다.

 

생활코딩 enum 강의 캡처
생활코딩 enum 강의자료

Enum 사용예제

 

https://www.tutorialspoint.com/java/lang/enum_valueof.htm
https://www.tutorialspoint.com/java/lang/enum_valueof.htm

 

@Mobile이라는 enum에서 "Samsung(400), Nokia(250), Motorola(325)" 이와 같이 나열했다. 하나만 예시를 들어보면 Samsung(400)이라는 뜻은 Samsung이라는 이름의 Mobile 타입 객체(instance)를 만드는데 Mobile의 생성자에 400을 인자로 전달한다는 의미이다.

 

@values(): enum의 모든 값들을 포함하는 배열을 리턴하는 static 메소드이다. 값들은 정의된 순서로 정렬되어 있다.

 

@valueOf(String): String을 인자로 받아 대응되는 enum을 리턴한다. 위의 예제에서 아래와 같이 쓰였다.

Mobile ret;
ret = Mobile.valueOf("Samsung");

객체의 이름을 인자로 받아 해당하는 객체가 존재하면 리턴하는 메소드인 것 같다.

 

 

살펴볼 자료들

https://www.geeksforgeeks.org/enum-in-java/

https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

https://www.youtube.com/watch?v=3Xwko1gOjZQ

728x90
Comments