2015년 4월 24일 금요일

Android : enum 열거형 데이터 타입(Handler 활용)

* enum Type은 구조체 대신 사용(Java 구조체가 없다. )


//enum 선언
public enum NetworkState {
     NETWORK_ON, NETWORK_OFF, AUTH_ON, AUTH_OFF
};

private NetworkState[] networkStates = NetworkState.values(); // 배열로 가지고온다.


//핸들러 생성
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
  try {
switch (networkStates[msg.what]) {
case AUTH_ON:

     break;
case AUTH_OFF:

     break;
default:
     break;
}
} catch (Exception e) {

}

       } //end method__

}; //end handler

//sendMessage
Message msg = mHandler.obtainMessage(NetworkState.AUTH_ON.ordinal(), 0, 0);
mHandler.sendMessage(msg);



* enum Data Type 설명 : 

enum은 데이터 타입 정의 해서 필요한 값만 사용 할 수 있게 사용하기 딱 좋은 데이터 형이다.
예를 든다면 통신사 타입을 사용 하는 변수가 필요하다 하자.

보통은 문자열 또는 정수형으로 "SKT", "KT"... 또는 "1" - SKT, "2" - KT 등으로 상호간 약속을 하고 이 테이더 를 사용하게 된다.
이 약속을 잘 지킬 경우 문제가 없어지지만 그렇지 않을 경우 에러가 발생 할 수 있다.

바로 함수에서 파라미터로 이 값을 전달 받을 케이스다.

void setTelecomType( int type);

이런 정수형으로 타입을 받을 때 서로 약속 한 정수 값이 아닌 다른 값이 왔을 경우 함수 안에서 일일히 if 문으로 데이터 유효성 검사를 해야만 하는 것이다. 저런거 많이 봤다... 하지만 이 경우 enum을 사용할 경우 위와 같은 걱정은 사라진다. enum으로 정의한 값만 올 수 있기 때문에 별도 다른 값이 올 수 없다. 특히 java는 enum이 byte 형태의 데이터가 아닌 별도 object 이므로 데이터가 혼용될 가능성은 낮다.

위에서 예를 든 통신사를 실제 enum으로 구현해 보자.


/**
 * 통신사  enum 값 정의
 */
public enum ETelecom {
    /** None */
    None, 
    /** SKT */
    SKT,
    /** KT */
    KT,
    /** LGT */
    LGT,
    /** MVNO */
    Other;
}
 

간단히 enum을 정의 해 사용 가능 하다.

댓글 없음:

댓글 쓰기