SlideShare a Scribd company logo
Enum(
소스 : https://github.com/hyomee/JAVABASIC
Content
1. 기본
2. Enum 원리
3. 코드 단순화
4. 서비스 호출
소스 : https://github.com/hyomee/JAVABASIC
1. 기본
1. Class 처럼 사용 : enum
2. Class 내부에 enum 사용 : 내부 class처럼
3. enum의 생성자는 private
4. 관련 Method
- valueOf(String) : String값을 enum에서 가져옴
- valueOf(Class String) : 넘겨받은 class에서 String찾아, enum에 가져옴
- values() : enum의 요소들을 순서대로 enum타입의 배열로 리턴
관련이 있는 상수들의 집합으로 완전한 Class로 Enum 사용시 1. 코드가 단순해지고, 가독성이 좋아짐 2. 상수값의 타입 안정성이 보장(컴파일 시점
에 체크, 인스턴스 생성과 상속 방지) 3. 구도 의도가 열거형 임을 명확이 함
1. Class Type
public enum ClassTypeEnum {
NAC, SUS, RSP, CAN
}
2. Inner Class Type
public class InnerClassTypeEnum {
public enum EventCode {
NAC, SUS, RSP, CAN
}
}
public static void main(String[] args) {
// 열거형에 있는 요소 전체 참조
ClassTypeEnum[] enumValues = ClassTypeEnum.values();
Arrays.stream(enumValues).forEach(classTypeEnum -> System.out.println(classTypeEnum));
// 요소 검사
String compValue = "NAC";
if (Arrays.stream(enumValues).anyMatch(classTypeEnum-> compValue.equals(String.valueOf(classTypeEnum)))) {
System.out.print(compValue + " 는 존재 합니다.");
} else {
System.out.print(compValue + " 는 존재 하지 않습니다..");
};.
}
결과 :
NAC
SUS
RSP
CAN
NAC 는 존재 합니다.
public static void main(String[] args) {
InnerClassTypeEnum.EventCode[] eventCode = InnerClassTypeEnum.EventCode.values();
Arrays.stream(eventCode).forEach(code -> System.out.println(code));
}
결과 :
NAC
SUS
RSP
CAN
2. Enum 원리
@Getter
public enum EventNm {
NAC("개통"),
SUS("일시정지"),
RSP("일시정지해제"),
CAN("해지");
private String eventNm;
EventNm(String eventNm) {
this.eventNm = eventNm;
}
}
public static void main(String[] args) {
InnerClassTypeEnum.EventNm eventNm = InnerClassTypeEnum.EventNm.valueOf("SUS");
System.out.print(eventNm.getEventNm());
}
1. 생성시점 : static 으로 생성 함 2. 값 취득
3. 실제 Value 얻음
일시정지
3. 코드 단순, 가독성
여러 조건이 만족 하는 IF문과 같은 곳에서 코드가 단순해 지며, 가독성이 좋아 지며, 코드의 추가 시 업무 로직의 변경 없이 Enum 객체만 수정 하면 되므로 유지보수 입장
에서 보면 효과적임
public static enum ONLINE_RUNDTTM_PRCTYPE {
CYB, CAS, ARS, PPS, FCG, MNT;
}
If (Arrays.stream(SvcCodeVal.ONLINE_RUNDTTM_PRCTYPE.values())
.anyMatch(items -> String.valueOf(items).equals(prcType))) {
// 업무 로직
}
If (SVC_PRC_TYPE_CYB.equals(prcType) ||
SVC_PRC_TYPE_ CAS.equals(prcType) ||
SVC_PRC_TYPE_ ARS.equals(prcType) ||
SVC_PRC_TYPE_ PPS.equals(prcType) ||
SVC_PRC_TYPE_ FCG.equals(prcType) ||
SVC_PRC_TYPE_ MNT.equals(prcType)
// 업무 로직
}
public static final String SVC_PRC_TYPE_CYB = "CYB"; // Mylgt
public static final String SVC_PRC_TYPE_MOB = "MOB"; // 모바일고객센터
public static final String SVC_PRC_TYPE_FCG = "FCG"; // FCG
public static final String SVC_PRC_TYPE_ARS = "ARS"; // ARS
public static final String SVC_PRC_TYPE_CAS = "CAS"; // CAS
public static final String SVC_PRC_TYPE_VPM = "VPM"; // 음성비화 등록화면
public static final String SVC_PRC_TYPE_DEV = "DEV"; // 기기변경
public static final String SVC_PRC_TYPE_DOC = "DOC"; // 개통서류
4. 서비스 호출
서비스 업무 로직
Enum 에서 서비스 호출
public interface EnumService {
String service1(String code);
String service2(String code);
}
@Service
class EnumServiceImpl implements EnumService {
@Override
public String service1(String code) {
return "nservice1:: service1";
}
@Override
public String service2(String code) {
return "nservice2:: service2";
}
}
EnumService service = new EnumServiceImpl();
InnerClassTypeEnum.EventServcie eventServcie = InnerClassTypeEnum.EventServcie.valueOf("NAC");
String vv = eventServcie.handleTask(service, "NAC");
System.out.print(vv);
public enum EventServcie {
NAC {
String handleTask(EnumService service, String code) {
return service.service1(code);
}
},
SUS {
String handleTask(EnumService service, String code) {
return service.service1(code);
}
};
abstract String handleTask(EnumService service, String code);
}
www.iabacus.co.kr
Tel. 82-2-2109-5400
Fax. 82-2-6442-5409
THANKS

More Related Content

PDF
[Swift] Protocol (1/2)
Bill Kim
 
PPTX
Gpg gems1 1.3
david nc
 
PDF
Start IoT with JavaScript - 6.함수
Park Jonggun
 
PPT
호이스팅, 클로저, IIFE
ChangHyeon Bae
 
PPTX
Javascript closure 2차과제 이승찬
승찬 이
 
PPTX
javascript01
ChangHyeon Bae
 
PDF
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
NAVER D2
 
PPTX
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Young-Beom Rhee
 
[Swift] Protocol (1/2)
Bill Kim
 
Gpg gems1 1.3
david nc
 
Start IoT with JavaScript - 6.함수
Park Jonggun
 
호이스팅, 클로저, IIFE
ChangHyeon Bae
 
Javascript closure 2차과제 이승찬
승찬 이
 
javascript01
ChangHyeon Bae
 
[D2 COMMUNITY] ECMAScript 2015 S67 seminar - 1. primitive
NAVER D2
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Young-Beom Rhee
 

What's hot (20)

PPTX
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Young-Beom Rhee
 
PDF
Start IoT with JavaScript - 1.기초
Park Jonggun
 
PPTX
Effective c++(chapter 5,6)
문익 장
 
PDF
[Swift] Generics
Bill Kim
 
PDF
7가지 동시성 모델 4장
HyeonSeok Choi
 
PDF
C Language For Arduino
영욱 김
 
PDF
Jvm
경륜 이
 
PPTX
Startup JavaScript 6 - 함수, 스코프, 클로저
Circulus
 
PPTX
7가지 동시성 모델 - 3장. 함수형 프로그래밍
Hyunsoo Jung
 
PDF
Javascript - Function
wonmin lee
 
PPTX
프론트엔드스터디 E05 js closure oop
Young-Beom Rhee
 
PPT
Xunittestpatternchapter11
duaa83
 
PDF
C++ Concurrency in Action 9-2 Interrupting threads
Seok-joon Yun
 
PPTX
자바스크립트 기초문법~함수기초
진수 정
 
PDF
C 언어 스터디 02 - 제어문, 반복문, 함수
Yu Yongwoo
 
PPTX
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Circulus
 
PDF
Effective c++ chapter1 2_dcshin
Dong Chan Shin
 
PDF
Javascript 교육자료 pdf
Hyosang Hong
 
PPTX
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Circulus
 
PDF
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
Yongha Yoo
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Young-Beom Rhee
 
Start IoT with JavaScript - 1.기초
Park Jonggun
 
Effective c++(chapter 5,6)
문익 장
 
[Swift] Generics
Bill Kim
 
7가지 동시성 모델 4장
HyeonSeok Choi
 
C Language For Arduino
영욱 김
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Circulus
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
Hyunsoo Jung
 
Javascript - Function
wonmin lee
 
프론트엔드스터디 E05 js closure oop
Young-Beom Rhee
 
Xunittestpatternchapter11
duaa83
 
C++ Concurrency in Action 9-2 Interrupting threads
Seok-joon Yun
 
자바스크립트 기초문법~함수기초
진수 정
 
C 언어 스터디 02 - 제어문, 반복문, 함수
Yu Yongwoo
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Circulus
 
Effective c++ chapter1 2_dcshin
Dong Chan Shin
 
Javascript 교육자료 pdf
Hyosang Hong
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Circulus
 
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
Yongha Yoo
 
Ad

Similar to Enum (20)

PPTX
Parallel objects
용준 김
 
PDF
Sonarqube 20160509
영석 조
 
PDF
3주차 스터디
Seungwee  Choi
 
PPTX
Windosw via c 스터디2장
HolyTak
 
PPT
어플리케이션 성능 최적화 기법
Daniel Kim
 
PPTX
Angular2 가기전 Type script소개
Dong Jun Kwon
 
PPTX
One-day-codelab
WebFrameworks
 
PDF
6 function
웅식 전
 
PPTX
Nlp study1
Lee Gyeong Hoon
 
PDF
Java stream v0.1
Hyosang Hong
 
PDF
Java stream v0.1
Hyosang Hong
 
PDF
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
유익아카데미
 
PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
PDF
병렬 프로그래밍
준혁 이
 
PDF
Swift3 subscript inheritance initialization
Eunjoo Im
 
PDF
JDK 변천사
SeungHyun Eom
 
PPTX
Annotation
JungHoon Lee
 
PPTX
강의자료 2
Young Wook Kim
 
PPTX
[HaU] 신입 기술 면접 준비 java
유리 하
 
PDF
2015 Kitel C 언어 강좌3
ssuseraf62e91
 
Parallel objects
용준 김
 
Sonarqube 20160509
영석 조
 
3주차 스터디
Seungwee  Choi
 
Windosw via c 스터디2장
HolyTak
 
어플리케이션 성능 최적화 기법
Daniel Kim
 
Angular2 가기전 Type script소개
Dong Jun Kwon
 
One-day-codelab
WebFrameworks
 
6 function
웅식 전
 
Nlp study1
Lee Gyeong Hoon
 
Java stream v0.1
Hyosang Hong
 
Java stream v0.1
Hyosang Hong
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
유익아카데미
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
병렬 프로그래밍
준혁 이
 
Swift3 subscript inheritance initialization
Eunjoo Im
 
JDK 변천사
SeungHyun Eom
 
Annotation
JungHoon Lee
 
강의자료 2
Young Wook Kim
 
[HaU] 신입 기술 면접 준비 java
유리 하
 
2015 Kitel C 언어 강좌3
ssuseraf62e91
 
Ad

More from Hyosang Hong (20)

PDF
MSA_기초자료.pdf
Hyosang Hong
 
PDF
Java 변수자료형
Hyosang Hong
 
PDF
Java 연산자
Hyosang Hong
 
PDF
Java lambda
Hyosang Hong
 
PDF
Java inner class
Hyosang Hong
 
PDF
Java generic
Hyosang Hong
 
PDF
Java 기초
Hyosang Hong
 
PDF
Java extends
Hyosang Hong
 
PDF
Java 제어
Hyosang Hong
 
PDF
Java collection
Hyosang Hong
 
PDF
Java class
Hyosang Hong
 
PDF
Spring 교육 자료
Hyosang Hong
 
PDF
Map struct
Hyosang Hong
 
PDF
Kafka 자료 v0.1
Hyosang Hong
 
PDF
Jpa 쿼리 포함 자료
Hyosang Hong
 
PDF
Java 이해하기 쉬운 코드 20210405
Hyosang Hong
 
PDF
Java 유지보수 가능한 개발 원칙
Hyosang Hong
 
PDF
Enum
Hyosang Hong
 
PDF
Spring 교육 자료
Hyosang Hong
 
PDF
Map struct
Hyosang Hong
 
MSA_기초자료.pdf
Hyosang Hong
 
Java 변수자료형
Hyosang Hong
 
Java 연산자
Hyosang Hong
 
Java lambda
Hyosang Hong
 
Java inner class
Hyosang Hong
 
Java generic
Hyosang Hong
 
Java 기초
Hyosang Hong
 
Java extends
Hyosang Hong
 
Java 제어
Hyosang Hong
 
Java collection
Hyosang Hong
 
Java class
Hyosang Hong
 
Spring 교육 자료
Hyosang Hong
 
Map struct
Hyosang Hong
 
Kafka 자료 v0.1
Hyosang Hong
 
Jpa 쿼리 포함 자료
Hyosang Hong
 
Java 이해하기 쉬운 코드 20210405
Hyosang Hong
 
Java 유지보수 가능한 개발 원칙
Hyosang Hong
 
Spring 교육 자료
Hyosang Hong
 
Map struct
Hyosang Hong
 

Enum

  • 2. Content 1. 기본 2. Enum 원리 3. 코드 단순화 4. 서비스 호출 소스 : https://github.com/hyomee/JAVABASIC
  • 3. 1. 기본 1. Class 처럼 사용 : enum 2. Class 내부에 enum 사용 : 내부 class처럼 3. enum의 생성자는 private 4. 관련 Method - valueOf(String) : String값을 enum에서 가져옴 - valueOf(Class String) : 넘겨받은 class에서 String찾아, enum에 가져옴 - values() : enum의 요소들을 순서대로 enum타입의 배열로 리턴 관련이 있는 상수들의 집합으로 완전한 Class로 Enum 사용시 1. 코드가 단순해지고, 가독성이 좋아짐 2. 상수값의 타입 안정성이 보장(컴파일 시점 에 체크, 인스턴스 생성과 상속 방지) 3. 구도 의도가 열거형 임을 명확이 함 1. Class Type public enum ClassTypeEnum { NAC, SUS, RSP, CAN } 2. Inner Class Type public class InnerClassTypeEnum { public enum EventCode { NAC, SUS, RSP, CAN } } public static void main(String[] args) { // 열거형에 있는 요소 전체 참조 ClassTypeEnum[] enumValues = ClassTypeEnum.values(); Arrays.stream(enumValues).forEach(classTypeEnum -> System.out.println(classTypeEnum)); // 요소 검사 String compValue = "NAC"; if (Arrays.stream(enumValues).anyMatch(classTypeEnum-> compValue.equals(String.valueOf(classTypeEnum)))) { System.out.print(compValue + " 는 존재 합니다."); } else { System.out.print(compValue + " 는 존재 하지 않습니다.."); };. } 결과 : NAC SUS RSP CAN NAC 는 존재 합니다. public static void main(String[] args) { InnerClassTypeEnum.EventCode[] eventCode = InnerClassTypeEnum.EventCode.values(); Arrays.stream(eventCode).forEach(code -> System.out.println(code)); } 결과 : NAC SUS RSP CAN
  • 4. 2. Enum 원리 @Getter public enum EventNm { NAC("개통"), SUS("일시정지"), RSP("일시정지해제"), CAN("해지"); private String eventNm; EventNm(String eventNm) { this.eventNm = eventNm; } } public static void main(String[] args) { InnerClassTypeEnum.EventNm eventNm = InnerClassTypeEnum.EventNm.valueOf("SUS"); System.out.print(eventNm.getEventNm()); } 1. 생성시점 : static 으로 생성 함 2. 값 취득 3. 실제 Value 얻음 일시정지
  • 5. 3. 코드 단순, 가독성 여러 조건이 만족 하는 IF문과 같은 곳에서 코드가 단순해 지며, 가독성이 좋아 지며, 코드의 추가 시 업무 로직의 변경 없이 Enum 객체만 수정 하면 되므로 유지보수 입장 에서 보면 효과적임 public static enum ONLINE_RUNDTTM_PRCTYPE { CYB, CAS, ARS, PPS, FCG, MNT; } If (Arrays.stream(SvcCodeVal.ONLINE_RUNDTTM_PRCTYPE.values()) .anyMatch(items -> String.valueOf(items).equals(prcType))) { // 업무 로직 } If (SVC_PRC_TYPE_CYB.equals(prcType) || SVC_PRC_TYPE_ CAS.equals(prcType) || SVC_PRC_TYPE_ ARS.equals(prcType) || SVC_PRC_TYPE_ PPS.equals(prcType) || SVC_PRC_TYPE_ FCG.equals(prcType) || SVC_PRC_TYPE_ MNT.equals(prcType) // 업무 로직 } public static final String SVC_PRC_TYPE_CYB = "CYB"; // Mylgt public static final String SVC_PRC_TYPE_MOB = "MOB"; // 모바일고객센터 public static final String SVC_PRC_TYPE_FCG = "FCG"; // FCG public static final String SVC_PRC_TYPE_ARS = "ARS"; // ARS public static final String SVC_PRC_TYPE_CAS = "CAS"; // CAS public static final String SVC_PRC_TYPE_VPM = "VPM"; // 음성비화 등록화면 public static final String SVC_PRC_TYPE_DEV = "DEV"; // 기기변경 public static final String SVC_PRC_TYPE_DOC = "DOC"; // 개통서류
  • 6. 4. 서비스 호출 서비스 업무 로직 Enum 에서 서비스 호출 public interface EnumService { String service1(String code); String service2(String code); } @Service class EnumServiceImpl implements EnumService { @Override public String service1(String code) { return "nservice1:: service1"; } @Override public String service2(String code) { return "nservice2:: service2"; } } EnumService service = new EnumServiceImpl(); InnerClassTypeEnum.EventServcie eventServcie = InnerClassTypeEnum.EventServcie.valueOf("NAC"); String vv = eventServcie.handleTask(service, "NAC"); System.out.print(vv); public enum EventServcie { NAC { String handleTask(EnumService service, String code) { return service.service1(code); } }, SUS { String handleTask(EnumService service, String code) { return service.service1(code); } }; abstract String handleTask(EnumService service, String code); }