Java

[Java] μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±

μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 20. 04:14
λ°˜μ‘ν˜•

β–Ά μΈν„°νŽ˜μ΄μŠ€μ˜ μ—­ν• 

μΈν„°νŽ˜μ΄μŠ€μ˜ 역할은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€κ°€ μ–΄λ–€ κΈ°λŠ₯의 λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜λŠ”μ§€ λͺ…μ‹œν•˜λŠ” 것이닀.

​

​

​

β–Ά μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±

μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨μ„ 많이 μˆ˜μ •ν•˜μ§€ μ•Šκ³  κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ λ‹€λ₯Έ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€.

​

​

​

β–Ά κ³ κ° 상담 μ „ν™” λ°°λΆ„ ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ°

package scheduler;

public interface Scheduler {
	public void getNextCall();
	public void sendCallToAgent();
}

 

package scheduler;

public class RoundRobin implements Scheduler {
	@Override
	public void getNextCall() {
		System.out.println("상담 μ „ν™”λ₯Ό μˆœμ„œλŒ€λ‘œ λŒ€κΈ°μ—΄μ—μ„œ κ°€μ Έμ˜΅λ‹ˆλ‹€.");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("λ‹€μŒ μˆœμ„œ μƒλ‹΄μ›μ—κ²Œ λ°°λΆ„ν•©λ‹ˆλ‹€.");
	}
    
}

 

package scheduler;

public class LeastJob implements Scheduler {
	@Override
	public void getNextCall() {
		System.out.println("상담 μ „ν™”λ₯Ό μˆœμ„œλŒ€λ‘œ λŒ€κΈ°μ—΄μ—μ„œ κ°€μ Έμ˜΅λ‹ˆλ‹€.");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("ν˜„μž¬ 상담 업무가 μ—†κ±°λ‚˜ λŒ€κΈ°κ°€ κ°€μž₯ 적은 μƒλ‹΄μ›μ—κ²Œ ν• λ‹Ήν•©λ‹ˆλ‹€.");
	}
    
}

 

package scheduler;

public class PriorityAllocation implements Scheduler {
	@Override
	public void getNextCall() {
		System.out.println("고객 등급이 높은 고객의 μ „ν™”λ₯Ό λ¨Όμ € κ°€μ Έμ˜΅λ‹ˆλ‹€.");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("업무 skill 값이 높은 μƒλ‹΄μ›μ—κ²Œ μš°μ„ μ μœΌλ‘œ λ°°λΆ„ν•©λ‹ˆλ‹€.");
	}
    
}

 

package scheduler;

import java.io.IOException;

public class SchedulerTest {
	public static void main(String[] args) throws IOException {
		System.out.println("μ „ν™” 상담 ν• λ‹Ή 방식을 μ„ νƒν•˜μ„Έμš”.");
		System.out.println("R : ν•œλͺ…μ”© μ°¨λ‘€λ‘œ ν• λ‹Ή ");
		System.out.println("L : 쉬고 μžˆκ±°λ‚˜ λŒ€κΈ°κ°€ κ°€μž₯ 적은 μƒλ‹΄μ›μ—κ²Œ ν• λ‹Ή ");
		System.out.println("P : μš°μ„ μˆœμœ„κ°€ 높은 고객 λ¨Όμ € ν• λ‹Ή ");

		int ch = System.in.read();  // ν• λ‹Ή 방식을 μž…λ ₯λ°›μ•„ ch λ³€μˆ˜μ— λŒ€μž…
		Scheduler scheduler = null;

		if (ch == 'R' || ch == 'r') {  // μž…λ ₯받은 값이 R λ˜λŠ” r 이면 RoundRobin 클래슀 생성
			scheduler = new RoundRobin();
		} 
		else if (ch == 'L' || ch == 'l') {  // μž…λ ₯받은 값이 L λ˜λŠ” l이면 LeastJob 클래슀 생성
			scheduler = new LeastJob();
		} 
		else if (ch == 'P' || ch == 'p') {  // μž…λ ₯받은 값이 P λ˜λŠ” p이면 PriorityAllocation 클래슀 생성
			scheduler = new PriorityAllocation();
		} 
		else {
			System.out.println("μ§€μ›λ˜μ§€ μ•ŠλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.");
			return;  // λ©”μ„œλ“œλ₯Ό μ’…λ£Œμ‹œν‚€κΈ° μœ„ν•΄μ„œ μ“°λŠ” 것. break;와 λΉ„μŠ·ν•œ κ°œλ…
			         // breakλŠ” 이 λ¬Έμž₯만 끝내고 계속 μ‹€ν–‰λ˜λŠ”λ° return은 μ•„μ˜ˆ ν•¨μˆ˜λ™μž‘μ΄ 끝남.
		}

		scheduler.getNextCall();
		scheduler.sendCallToAgent();  // μ–΄λ–€ 정책인가와 상관없이 μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έν•œ λ©”μ„œλ“œ 호좜
	}
    
}

-12ν–‰μ—μ„œ 문자λ₯Ό μž…λ ₯λ°›μœΌλ©΄ μž…λ ₯ λ¬Έμžμ— ν•΄λ‹Ήν•˜λŠ” λ°°λΆ„ μ •μ±… 클래슀λ₯Ό μƒμ„±ν•˜μ—¬ λŒ€μž…ν•œλ‹€.

RoundRobin, LeastJob, PriorityAllocation 클래슀둜 μƒμ„±ν•œ μΈμŠ€ν„΄μŠ€λŠ” λͺ¨λ‘ Schedulerν˜• λ³€μˆ˜μ— λŒ€μž…ν•  수 μžˆλ‹€. 그리고 μ‚¬μš©ν•  μΈμŠ€ν„΄μŠ€κ°€ μ–΄λ–€ 클래슀둜 μƒμ„±λ˜μ—ˆλŠ”μ§€μ™€ 상관없이 29~30ν–‰μ²˜λŸΌ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ λœλ‹€.

​

​

<μ‹€ν–‰ κ²°κ³Ό>

 

 

 

β–Ά μΈν„°νŽ˜μ΄μŠ€ μƒμˆ˜

μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 λ©”μ„œλ“œλ‘œ μ΄λ£¨μ–΄μ§€λ―€λ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†μœΌλ©° 멀버 λ³€μˆ˜λ„ μ‚¬μš©ν•  수 μ—†λ‹€.

그런데 μΈν„°νŽ˜μ΄μŠ€μ— 였λ₯Έμͺ½ μ½”λ“œμ™€ 같이 λ³€μˆ˜λ₯Ό 선언해도 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ μ΄μœ λŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό μ»΄νŒŒμΌν•˜λ©΄ μƒμˆ˜λ‘œ λ³€ν™˜λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

​

λ°˜μ‘ν˜•