๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[Java] ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹คํ˜•์„ฑ

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 2. 20.
๋ฐ˜์‘ํ˜•

โ–ถ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์—ญํ• 

์ธํ„ฐํŽ˜์ด์Šค์˜ ์—ญํ• ์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โ€‹

โ€‹

โ€‹

โ–ถ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹คํ˜•์„ฑ

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŽ์ด ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

โ€‹

โ€‹

โ–ถ ๊ณ ๊ฐ ์ƒ๋‹ด ์ „ํ™” ๋ฐฐ๋ถ„ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ

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ํ–‰์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

โ€‹

โ€‹

<์‹คํ–‰ ๊ฒฐ๊ณผ>

 

 

 

โ–ถ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์ˆ˜

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜ค๋ฅธ์ชฝ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โ€‹

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€