제 홈페이지의 모든 글은 anti-nhn license에 따릅니다.
2008년 05월 08일
java enum 정리 1 - 기본 개념
enum에 대해서 총 3부작으로 연재를 할려고 합니다.
1 - 기본 개념
2 - enum의 메쏘드
3 - java.lang.Enum 클래스와 enum의 실체
이 글은 그 첫번째로 enum에 대한 개념을 잡는 글입니다.
enum은 비스무레한 원소들이 상수로 정의되는 클래스를 대신하기 위한 것입니다. java 1.5에서 추가되었죠.
Gender를 정의하려면 enum을 사용하지 않으면 다음과 같은 class로 정의할 수 있습니다.
public class Gender{
public static final int MALE = 1;
public static final int FEMALE = 2;
}
위와 같은 방법이 가지는 문제점이 몇 가지 있습니다.
첫째, MALE은 무조건 1이지만, 1이라는 숫자가 MALE만 나타내는 것은 아닙니다.
둘째, 이 Gender의 값들을 받아서 쓰는 메쏘드에서는 1,2 이외의 숫자가 들어오면 어떤 식으로 처리를 해 주어야 할지 난감합니다.
이런 경우 Gender은 다음과 같은 enum으로 정의하면 됩니다.
public enum Gender {
MALE, FEMAIL
}
이제 Gender를 인자로 받아서 어떤 성별이 들어왔는지 찍어주는 메쏘드를 만들어봅시다.
public class GenderTest {
public static void printGender (Gender d){
System.out.println(d);
}
public static void main(String[] args) {
printGender(Gender.MALE);
}
}
enum은 swtich - case에서도 사용할 수 있습니다. 이번에는 남자면 "싫어", 여자면 "좋아"를 출력해주는 메쏘드를 만들어봅시다.
public class GenderTest {
public static void printGender(Gender d){
System.out.println(d);
}
public static void print(Gender d){
switch (d) {
case MALE: System.out.println("싫어");break;
default: System.out.println("좋아");break;
}
}
public static void main(String[] args) {
printGender(Gender.MALE);
print(Gender.MALE);
print(Gender.FEMAIL);
}
}
여기서 유의할 점은 case MALE: 부분입니다. case Gender.MALE이 아니고 그냥 MALE입니다. switch 에 enum이 들어올 경우 컴파일러가 알아서 case 쪽에는 그 enum의 타입을 적용해 줍니다.
Gender에 어떤 요소들이 들어가 있는 지 살펴볼 수 있는 방법을 소개하죠.
for(Gender g : Gender.values()){
System.out.println(g);
}
Gender.values() 메쏘드를 호출하면 그 enum에 들어가 있는 모든 요소들이 Gender[] 로 리턴 됩니다.
# by | 2008/05/08 00:03 | 컴터질~ | 트랙백 | 핑백(1) | 덧글(10)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
... 본 내용은 Paleys.com 에 있는 Joshua bloch의 Effective java reload 동영상을 바탕으로 쓴 글입니다.eunm에 대한 기본 지식이 없다면 이전에 정리해 놓은 글들을 먼저 보시고 보시는 게 좋을 듯합니다.1. ordinalenum에는 ordinal() 메쏘드가 있는데, 이 것은 각 element의 순서대로 번호가 생깁니다. 따라 ... more
도움이 됐습니다. 감사합니다. ^^
누군가가 답글을 달 때마다 사실 섬뜩합니다. 내 무식함이 어디서 또 뽀록난 건 아닌가.. 싶은 생각이 듭니다. 답글 하나 보면 원래 썼던 글 다시 한 번 쭉 살펴봅니다. 그러다가 잘못쓴 거 찾아내서 남몰래(진짜로 모를 지는 모르지만.--;) 수정하기도 합니다.
글 좀 퍼가겠습니다.
블로그는 다음에 티스토리 이용하고 있고요
출처는 꼭 넣어 놓겠습니다.
그럼 수고하세요~
전에 썼었는데
다시 쓸려니깐 기억이 안났었는데 감사합니다~ ㅎㅎ
글좀 퍼가서 공부좀 하겠습니다 ㅎㅎ;;