3:1:16 ~ 3:1:17


이론 정리

복습해 봅시다.

3쳅터에서 공부한 내용이 전부 접목되어 있는 좋은 소드 코드 입니다. ^^

새로운 느낌~!

  • 무려 다이아몬드의 화살표
  •  

질문하는데 시간을 소모하지 않고 일단 . 강의대로 받아들이자 ^^!

A에 B의 인스턴스를만드는것이지만. 화살표의 방향으로 인해 상속의 계념과 햇갈릴수 있지만 가리키는 대상이 반대로 A가 주어로 작동한다. 화살표의 방향 보다 마름모의 방향이 주어가 된다.

마름모의 내부가 검은색이면 생명주기가 같고. 비어있으면 연관이없다.

정확화게는 static 이나 final 등으로 static 메모리에 B의 인스턴스를 올렸을 경우에 해당한닥 볼수도 있겠다.

슈도 코드 방식의 암기결과 : 정상 작동

package TEST2;

public class AdvancedLevel extends PlayerLevel {

	@Override
	public void run() {
		System.out.println("빨리 달립니다");
		
	}

	@Override
	public void jump() {
		System.out.println("점프합니다");
		
	}

	@Override
	public void turn() {
		System.out.println("턴 하였습니다");
		
	}

	@Override
	public void showLevelMessage() {
		System.out.println("-------- 중급자 레벨 --------");
	}

}
package TEST2;

public class BeginnerLevel extends PlayerLevel {

	@Override
	public void run() {
		System.out.println("천천히 달립니다");
	}

	@Override
	public void jump() {
		System.out.println("점프할수 없습니다");
	}

	@Override
	public void turn() {
		System.out.println("턴 할수 없습니다");
	}

	@Override
	public void showLevelMessage() {
		System.out.println("-------- 초급자 레벨 --------");		
	}

	
}
package TEST2;

public class Mainboard {
/*
Player가 있고 Player는 PlayerLevel 속성을 가집니다. 각 PlayerLevel 단계 마다 run(), jump(), turn() 세 가지 기능이 업그레이드 됩니다.
초보자 레벨 : 천천히 달립니다. run() 만 가능
중급자 레벨 : 빠르게 달리고, 점프할 수 있습니다. run(), jump() 가능
고급자 레벨 : 엄청 빠르게 달리고, 높게 점프하고, 턴할 수 있습니다. run(), jump(), turn() 가능
Player는 한번에 하나의 레벨 상태만을 가질 수 있습니다.
Player가 play() 중에 레벨에 있는 go(int count) 라는 메서드를 호출하면 run() 하고 count 횟수 만큼 jump() 하고 turn() 합니다. 다음 클래스 다이어그램을 참고하여 각 레벨에서 go() 가 호출 될때 다음과 같이 출력 되도록 하세요
 * 
 * */
	public static void main(String[] args) {
		Player player = new Player();
		player.playerlevel.showLevelMessage();
		player.playerlevel.go(1);
		AdvancedLevel Alevel = new AdvancedLevel();
		player.upgradeLevel(Alevel);
		Alevel.go(2);
		SuperLevel Slevel = new SuperLevel();
		player.upgradeLevel(Slevel);
		Slevel.go(3);
		
	}
}
package TEST2;

public class Player {
	PlayerLevel playerlevel ; 
	Player(){
		playerlevel = new BeginnerLevel() ;
	}
	void upgradeLevel(PlayerLevel level) {
		this.playerlevel = level;
		level.showLevelMessage();
	}
}
package TEST2;

public abstract class PlayerLevel {
	public abstract void run();
	public abstract void jump();
	public abstract void turn();
	public abstract void showLevelMessage();
	
	public void go(int count) {
		run();
		
		for (int i = 0; i < count; i++) {
			jump();			
		}
		
		turn();
		
		
	}
	
}
package TEST2;

public class SuperLevel extends PlayerLevel {

	@Override
	public void run() {
		System.out.println("아주 빠르게 달립니다");
		
	}

	@Override
	public void jump() {
		System.out.println("높이 점프 합니다");
		
	}

	@Override
	public void turn() {
		System.out.println("턴 하였습니다");
		
	}

	@Override
	public void showLevelMessage() {
		System.out.println("-------- 고급자 레벨 --------");
		
	}

}

인터페이스를 활용한 정책 프로그래밍

  1. 같은 메소드를 하위에서 필요에 따라 다르게 작동시키게 하는방법
  2. 상담원의 데이터가 어디있는지 명시가 되어있지 않다.
    1. 이런경우 이전 코드를 생각해보면. 단순히 콘솔아웃의 코드일경우가 있다.
  3. 고객의 데이터를 수기로 입력해서
  4. 여기에서 사용되는 3가지의 인터페이스를 활용하는 정책이 전부 스케듈링의 방식을 따르고 있기 때문에 좋은 복합적 이지만 재미있는 기회이다.
    1. RoundRobin(둥근 로빈): 시간 순서대로 일장한 양의 작업을 배분
    2. leastJob(리스트잡 :최소 작업) : 최소의 작업을 갖고있는 직원에게 배분
    3. PriorityAllocation(우선순위할당 방식) : 등급대 등급으로 배분

    새로운 문법

    int ch = System.in.read();
    • ch에는 정말 char타입의 한글자만 입력을 받을수 있다.

예제코드

package TEST3;

public class LeastJob implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("다음 작업 오라 오라 !YES!");
		
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("가장 잡업의 량이 적은 상담사에게 배분 됩니다.");
	}

}
package TEST3;

public class PriorityAllocation implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("다음 작업 오라 오라 !YES!");
		
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("우선순위배분 : 작업의 우선순위 등급에 맞는 프로세서(상담사)에게 배분됩니다");
	}
// 우선순위 할당
}
package TEST3;

public class RoundRobin implements Scheduler {

	@Override
	public void getNextCall() {
		System.out.println("다음 작업 오라 오라 !YES!");
	}

	@Override
	public void sendCallToAgent() {
		System.out.println("시간순으로 일정하게 작업이 배분되는 순서대로 상담사에게 배분 되었습니다. ");
		
	}

}
package TEST3;

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

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();
		Scheduler scheduler = null;
		
		if ( ch == 'R' || ch =='r') {
			scheduler = new RoundRobin();
		}
		else if ( ch == 'L' || ch =='l') {
			scheduler = new LeastJob();
		}
		else if ( ch == 'P' || ch =='p') {
			scheduler = new PriorityAllocation();
		}
		else {
			System.out.println("지원되지 않는 기능입니다.");
			return;
		}
		
		scheduler.getNextCall();
		scheduler.sendCallToAgent();
	}

}

이제 선생님께서 과제를 제출하시고 교육시키시는 시스템에 어느정도 익숙해진것 같다.


전문 용어


 

에러 메세지


 

 

캠 스터디


공부 모임

1) 카카오톡 오픈 채팅방

  - 모르는것을 질문하거나

  - 이해가 가지 않는 부분을 다른 분들의 블로그에서 참고하기 용도

2) 구루미 온라인 독서실

  - 학습 시간을 관리 하거나 경쟁 하는 용도 

 

온라인 강의 주소

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

+ Recent posts