Chapter 13. Enum 열거형
final로 지정한 상수가 이름이 중복되는 경우가 발생한다.
열거형이란,
자바의 열거형은 C언어의 열거형보다 더 향상된 것으로 열거형이 갖는 값뿐만 아니라 타입까지 관리한다.
JAVA에서 상수는 어떻게 정의하는가?
1. public static final 을 이용하여
1 2 3 | public static final FRUIT_APPLE = 1; public static final FRUIT_ORANGE = 2; public static final COMPANY_APPLE = 3; | cs |
2. interface를 이용한다.(public static final 을 생략할 수 있다.)
1 2 3 4 | interface FRUIT { FRUIT.APPLE COMPANY.APPLE } | cs |
(FRUIT.APPLE == COMPANY.APPLE)
-> 비교 대상이 아닌데 (비교할 수 없는 상수의 그룹인데) 비교하는 오류가 발생할 수 있다.
3. 서로 비교조차 할 수 없게 컴파일러 선에서 인지할 수 있도록 코딩해야 한다.
(나중에 애플리케이션이 구동하는 과정에서 문제를 일으키기 때문이다.)
class Fruit
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
(각각의 인스턴스를 넣는다, 데이터 타입은 같다)
class Company
(위에서의 APPLE과 데이터 타입이 달라지게 된다. -> 둘을 비교하게 되면 컴파일 자체를 거부한다.)
하지만 상수를 사용할 수 없게 된다.
어떤 문제점을 해결하다보니 목적에서 문제가 발생하게 된 것이다.
cf) switch 문을 사용할 때 조건으로는 몇 가지 제한된 데이터 타입만을 사용할 수 있다.(원시 자료형 데이터 타입)
Finally. enum을 사용한다.
(열거형 enumerated type) 서로 연관된 상수(바뀌지 않는 값)들의 집합
3번에서 class를 enum으로 바꿔준다.
1 2 3 4 5 6 | enum Fruit{ APPLE, PEACH, BANANA; } enum Company{ GOOGLE, FACEBOOK, APPLE; } | cs |
APPLE, PEACH, GOOGLE 등을 레이블이라 부른다.(enum class = Fruit)
클래스이기 때문에 생성자를 갖을 수 있다.
APPLE, PEACH, BANANA를 생성할 때 마다 생성자가 호출된다.
Fruit( ){
System.out.println("call contructor".this);
}
이 생성자를 통해서 상수가 되는 클래스가 어떠한 값을 갖을 수 있도록 한다.
즉 변수를 정의할 수 있다.
또한 메소드도 정의할 수 있다.
code>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | enum Fruit{ APPLE("red"), PEACH("pink"), BANANA("yellow"); String color; Fruit(String color){ this.color = color; } } public class Main { public static void main(String[] arg){ for(Fruit f:Fruit.values()){ System.out.println( f +"은" + f.color + "색 입니다."); } } } > APPLE은 red 색 입니다. > PEACH는 pink 색 입니다. > BANANA는 yellow 색 입니다. | cs |
포스팅 내용은 생활코딩의 이고잉님의 강의자료를 기준으로 작성하였습니다. 문제가 될 시 삭제하겠습니다.
Chapter 13. The End
'Dev.BackEnd > JAVA' 카테고리의 다른 글
#Reflection 리플렉션이란? (0) | 2016.07.19 |
---|---|
[JAVA] 14 - 1. Collection Framework(컬렉션 프레임워크) - List (0) | 2016.07.17 |
[JAVA] 12. Generics (지네릭스) (0) | 2016.07.16 |
[JAVA] 11 - 2. Object 클래스와 그 메소드들 (0) | 2016.07.16 |
[JAVA] 11 - 1. Object 클래스와 그 메소드들 (0) | 2016.07.14 |