Hi

enum 본문

Programming/Java

enum

SharingWorld 2018. 4. 9. 15:24
스택을 만들어보자
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