제 홈페이지의 모든 글은 anti-nhn license에 따릅니다.



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, FEMALE 
}

이제 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.FEMALE);
    }
}


여기서 유의할 점은 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) | 덧글(14)

트랙백 주소 : http://iilii.egloos.com/tb/4343065
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at 건실성실착실 3실 청년! : .. at 2009/02/04 11:36

... 본 내용은 Paleys.com 에 있는 Joshua bloch의 Effective java reload 동영상을 바탕으로 쓴 글입니다.eunm에 대한 기본 지식이 없다면 이전에 정리해 놓은 글들을 먼저 보시고 보시는 게 좋을 듯합니다.1. ordinalenum에는 ordinal() 메쏘드가 있는데, 이 것은 각 element의 순서대로 번호가 생깁니다. 따라 ... more

Commented by wow at 2008/07/29 14:36
정리가 명쾌하고 간단하게 돼 있네요.
도움이 됐습니다. 감사합니다. ^^
Commented by 삼실청년 at 2008/08/07 17:34
하핫~ 고맙습니다. 혼자 공부하는 것보다 누군가 볼 수 있다는 압박감을 가지고 공부를 하니 정리가 더 잘 되더군요.
누군가가 답글을 달 때마다 사실 섬뜩합니다. 내 무식함이 어디서 또 뽀록난 건 아닌가.. 싶은 생각이 듭니다. 답글 하나 보면 원래 썼던 글 다시 한 번 쭉 살펴봅니다. 그러다가 잘못쓴 거 찾아내서 남몰래(진짜로 모를 지는 모르지만.--;) 수정하기도 합니다.
Commented by hajima at 2008/08/22 00:03
요즘 자바 공부를 하고 있는데 하하 ...
글 좀 퍼가겠습니다.
블로그는 다음에 티스토리 이용하고 있고요
출처는 꼭 넣어 놓겠습니다.
Commented by 삼실청년 at 2008/09/02 03:10
미흡하나마 도움이 되셨길 바랍니다.
Commented by Doridori at 2008/10/18 16:27
좋은 정보 보고 갑니다. 저도 google에서 찾아서 왔는데 이글루스네요~ add link해두고 틈틈히 도움 받겠습니다^^
Commented by 삼실청년 at 2008/10/19 02:11
최근에 업데이트가 좀 뚱...합니다. 디자인 패턴을 남머지 채울려고 열심히 공부하고 있다고 생각해주시면 고맙겠습니다.^^
Commented by 노군 at 2008/11/08 12:17
좋은 정보 감사합니다. 간만에 자바공부하려니 힘드네요~ ^^
그럼 수고하세요~
Commented by 삼실청년 at 2008/11/11 03:58
원래 공부가 힘든 거 같아요. 저는 모든 것을 알게 된 것 같은 기분과 아무 것도 모르는 것 같은 기분 사이를 하루에도 수백번씩 왔다갔다 합니다.
Commented by 모험가 at 2009/03/24 01:08
좋은글 감사합니다~
전에 썼었는데
다시 쓸려니깐 기억이 안났었는데 감사합니다~ ㅎㅎ
글좀 퍼가서 공부좀 하겠습니다 ㅎㅎ;;
Commented by 삼실청년 at 2009/03/25 14:37
^^ 넹~
Commented by Keepburnin at 2010/06/03 14:02
정리가 잘 되어있네요~
감사합니다!
Commented by 삼실청년 at 2010/06/09 16:27
하핫~ 고맙습니다~ 좋은하루 되세요^^
Commented by ryukato at 2011/09/01 00:26
안녕하세요? 공부하다가 enum부분이 나와서 여기와서 또 보고 있습니다.
근데 values(), valueOf() 요 메서드들을 API랑 enum소스에서 한참 찾았는데 없어서 뭐지? 뭐지? 했는데 내부적으로 생성해주는 메서드였군요. ㅎㅎ;;
암튼 많은 것을 배워갑니다. 감사합니다.
Commented by 삼실청년 at 2011/09/26 23:11
저도 디컴파일러 돌려 보고나서야 알았습니다. 인터넷 뒤적거려보니 이미 사람들이 다 해놓은 거 뒷북쳤었더군요.ㅜㅜ

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶