SlideShare a Scribd company logo
1 of 7
Download to read offline
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

What's hot

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

What's hot (20)

Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
[Swift] Generics
[Swift] Generics[Swift] Generics
[Swift] Generics
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino
 
Jvm
JvmJvm
Jvm
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저
 
7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍7가지 동시성 모델 - 3장. 함수형 프로그래밍
7가지 동시성 모델 - 3장. 함수형 프로그래밍
 
Javascript - Function
Javascript - FunctionJavascript - Function
Javascript - Function
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
Xunittestpatternchapter11
Xunittestpatternchapter11Xunittestpatternchapter11
Xunittestpatternchapter11
 
C++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threadsC++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threads
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수C 언어 스터디 02 - 제어문, 반복문, 함수
C 언어 스터디 02 - 제어문, 반복문, 함수
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
스위프트, 코틀린과 모던언어의 특징 (Swift, Kotlin and Modern Languages)
 

Similar to Enum

Parallel objects
Parallel objectsParallel objects
Parallel objects용준 김
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장HolyTak
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3ssuseraf62e91
 

Similar to Enum (20)

Parallel objects
Parallel objectsParallel objects
Parallel objects
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
3주차 스터디
3주차 스터디3주차 스터디
3주차 스터디
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
6 function
6 function6 function
6 function
 
Nlp study1
Nlp study1Nlp study1
Nlp study1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
Annotation
AnnotationAnnotation
Annotation
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3
 

More from Hyosang Hong

More from Hyosang Hong (20)

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

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); }