Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ESG
- HTML
- colllection
- 비메모리 자원
- 월칙
- 레퍼런스 복사
- 칭기즈칸의 위대한 장군 수부타이
- try-with-resources
- 모두가 기다리는 사람
- docker
- node
- CSS
- sentry
- kubernetes
- 아웃풋법칙
- 도파민형 인간
- 수부타이
- 히든 스토리
- 공헌감
- 쿠버네티스
- java
- apache kafka
- 이펙티브 자바
- Infresh
- 참조 계수
- 과제의 분리
- Container
- 부자의그릇
- 뉴 컨피던스
- try width resources
Archives
- Today
- Total
Hi
enum 본문
class User {
// 1. 상수
public static final int STATE_RUNNING = 0;
public static final int STATE_STOP = 1;
public static final int STATE_INTERRUPTABLE = 2;
// 문제점
// 1. 잘못된 값을 대입하였을 경우, 컴파일 타임에 감지가 어렵다.
// 2. switch / else if 의 코드가 발생한다.
// => Enum
private int state = STATE_STOP;
void process() {
switch (state) {
case STATE_RUNNING:
System.out.println("User running");
break;
case STATE_STOP:
System.out.println("User stop");
break;
case STATE_INTERRUPTABLE:
System.out.println("User interruptable");
break;
}
}
public void setState(int state) {
this.state = state;
}
}
public class Program_0308 {
public static void main(String[] args) {
User user = new User();
user.setState(42);
user.process();
user.setState(User.STATE_STOP);
user.process();
}
}
// enum class
// => 각각의 상태에 따른 동작의 변화를 캡슐화 할 수 있다.
// => State Pattern
// 문제점?
// => 상태가 별로 없을 때 사용하면 복잡해질 수 있다.
// '성능 및 메모리' 오버헤드가 있다.
class User {
// RUNNING
// State - abstract method process
// RUNNING STOP INTERRUPTABLE
enum State {
RUNNING {
@Override
void process() {
System.out.println("User running");
}
},
STOP {
@Override
void process() {
System.out.println("User stop");
}
},
UNINTERRUPTABLE {
@Override
void process() {
System.out.println("User uninterruptable");
}
},
INTERRUPTABLE {
@Override
void process() {
System.out.println("User interruptable");
}
};
abstract void process();
}
private State state = State.STOP;
// 코드의 기능을 변경하기 않고 구조를 개선하는 작업
// => 리팩토링
// Replace type code with Polymorphism
void process() {
state.process();
// switch (state) {
// case State.RUNNING:
// System.out.println("User running");
// break;
// case STATE_STOP:
// System.out.println("User stop");
// break;
// case STATE_INTERRUPTABLE:
// System.out.println("User interruptable");
// break;
// }
}
public void setState(State state) {
this.state = state;
}
}
public class Program_0308 {
public static void main(String[] args) {
User user = new User();
user.setState(User.State.UNINTERRUPTABLE);
user.process();
user.setState(User.State.STOP);
user.process();
}
}
'Programming > Java' 카테고리의 다른 글
Library, Engine, Framework (0) | 2018.04.09 |
---|---|
Clone() 과 공변의 룰 (0) | 2018.04.09 |
Input Output Stream (0) | 2018.04.09 |
Interface (0) | 2018.04.09 |
functionalInterface (0) | 2018.04.09 |