마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자바 enum 질문좀 드립니다..

0 추천
public enum Type {
CUSTOM      ( 0), // PPS Custom Message.
CONNECT     ( 1),
CONNACK     ( 2),
PUBLISH     ( 3),
PUBACK      ( 4),
PUBREC      ( 5),
PUBREL      ( 6),
PUBCOMP     ( 7),
SUBSCRIBE   ( 8),
SUBACK      ( 9),
UNSUBSCRIBE (10),
UNSUBACK    (11),
PINGREQ     (12),
PINGRESP    (13),
DISCONNECT  (14);
 
final private int val;
 
Type(int val) {
this.val = val;
}
 
static Type valueOf(int i) {
for(Type t: Type.values()) {
if (t.val == i)
return t;
}
return null;
}
}
 
이렇게 구현된 enum 부분이 있는데..
 
밑에
final private int val;
 
Type(int val) {
this.val = val;
}
 
static Type valueOf(int i) {
for(Type t: Type.values()) {
if (t.val == i)
return t;
}
return null;
}
 
 
이 부분이 뜻하는 코드를 모르겟는데 살짝 설명좀 해주시면 감사하겠습니다..
 
윤둥이 (4,560 포인트) 님이 2013년 10월 7일 질문

3개의 답변

0 추천

valueOf

int 값을 전달하면 그에 해당하는 type 을 반환 합니다.

 

생성자에서 Type t = new Type(1); 이고 

t.valueOf(1): 이면 CONNECT  를 반환하는 것이죠

aucd29 (218,390 포인트) 님이 2013년 10월 7일 답변
0 추천
자바에서 enum 은 c/c++ 의 것과는 다르게 그냥 syntactic sugar 일뿐입니다. 일반 클레스를 enumeration 의 개념으로 좀더 특화시킨것 뿐입니다. 이런 맥락에서 생각해보면 Type(int val) 은 constructor 가 되겠도 valueOf 는 factory 라고 생각하시면 될거에요.
엥꼬 (1,170 포인트) 님이 2013년 10월 7일 답변
0 추천
Type(int val) {
this.val = val;
}
은 CUSTOM  (0), CONNECT (1)... 와 같이 의미있는 이름(CUSTOM, CONNECT...) 외에 int 값을 지정하기 위해서 사용한 것입니다.
 
static Type valueOf(int i) 는 보통 public으로 많이 선언하는데 public이 생략된 것으로보아 어떤 클래스 내부에 enum이 구현된 듯하네요..
이 것은 int값으로 enum 값을 비교하기 위해 만든 것입니다.
 
 
아래와 같이 사용될 수 있겠죠..
 
int myType = 1;
if (Type.valueOf(myType) == CONNECT)
또는
switch(Type.valueOf(myType))
{
  case CUSTOM:
                                 ....
                                 break;
  case CONNECT:
                                 ...
                                  break;
  default:
}
 
isul (7,920 포인트) 님이 2013년 10월 7일 답변
...