Java 초급 (46)

반응형

 

문제

 

package kr.or.ddit.homework.home15;

public class HomeWork15 {
	public static void main(String[] args) {
		System.out.println("전화 상담의 분배 방식 선택.");
		System.out.println("R: RoundRobn");
		System.out.println("L: LeastJob");
		System.out.println("P: PriorityAllocation");
		System.out.println("선택 >>");
		/*
		 *  Schedular 클래스.
		 *  getNextCall(); 
		 *  sendCallToAgent();
		 *  
		 *  RoundRobn, LeastJob, PriorityAllocation 클래스는 각각 
		 *  Schedular 클래스를 상속  받기.
		 *  
		 *  PriorityAllocation
		 *   getNextCall
		 *   -> 우선 순위가 높은 상담전화를 대기열에서 가져옴.
		 *   sendCallToAgent
		 *   -> 업무 스킬이 가장 우수한 상담원에게 상담전화를 분배.
		 *   
		 *  RoundRobn
		 *   getNextCall
		 *   -> 상담전화를 대기열에서 차례대로 가져옴.
		 *   sendCallToAgent
		 *   -> 차례대로 상담원에게 상담전화를 분배.
		 *   
		 *  LeastJob
		 *   getNextCall
		 *   -> 상담전화를 대기열에서 차례대로 가져옴.
		 *   sendCallToAgent
		 *   -> 대기열이 가장 짧은 상담원에게 상담전화를 분배.
		 */
		Schedular s ;
		s.getNextCall(); 
		s.sendCallToAgent();
		
	}
}

 

 

 

정답

 

package kr.or.ddit.homework.HomeWork15;

public class Schedular {
	
	public void getNextCall() {
	}
	
	public void sendCallToAgent() {
	}
}

 

package kr.or.ddit.homework.HomeWork15;

public class PriorityAllocation extends Schedular{
	@Override
	public void getNextCall() {
		System.out.println("우선 순위가 높은 상담전화를 대기열에서 가져옴");
	}
	
	@Override
	public void sendCallToAgent() {
		System.out.println("업무 스킬이 가장 우수한 상담원에게 상담전화를 분배");
	}
}

 

package kr.or.ddit.homework.HomeWork15;

public class RoundRobn extends Schedular{
	@Override
	public void getNextCall() {
		System.out.println("상담전화를 대기열에서 차례대로 가져옴");
	}
	
	@Override
	public void sendCallToAgent() {
		System.out.println("차례대로 상담원에게 상담전화를 분배");
	}
}

 

package kr.or.ddit.homework.HomeWork15;

public class LeastJob extends Schedular{
	@Override
	public void getNextCall() {
		System.out.println("상담전화를 대기열에서 차례대로 가져옴");
	}
	
	@Override
	public void sendCallToAgent() {
		System.out.println("대기열이 가장 짧은 상담원에게 상담전화를 분배");
	}
}

 

package kr.or.ddit.homework.HomeWork15;

import java.util.Scanner;

public class HomeWork15 {
	public static void main(String[] args) {
		System.out.println("전화 상담의 분배 방식 선택.");
		System.out.println("R: RoundRobn");
		System.out.println("L: LeastJob");
		System.out.println("P: PriorityAllocation");
		System.out.println("선택 >>");
		/*
		 *  Schedular 클래스.
		 *  getNextCall(); 
		 *  sendCallToAgent();
		 *  
		 *  RoundRobn, LeastJob, PriorityAllocation 클래스는 각각 
		 *  Schedular 클래스를 상속  받기.
		 *  
		 *  PriorityAllocation
		 *   getNextCall
		 *   -> 우선 순위가 높은 상담전화를 대기열에서 가져옴.
		 *   sendCallToAgent
		 *   -> 업무 스킬이 가장 우수한 상담원에게 상담전화를 분배.
		 *   
		 *  RoundRobn
		 *   getNextCall
		 *   -> 상담전화를 대기열에서 차례대로 가져옴.
		 *   sendCallToAgent
		 *   -> 차례대로 상담원에게 상담전화를 분배.
		 *   
		 *  LeastJob
		 *   getNextCall
		 *   -> 상담전화를 대기열에서 차례대로 가져옴.
		 *   sendCallToAgent
		 *   -> 대기열이 가장 짧은 상담원에게 상담전화를 분배.
		 */
		Scanner sc = new Scanner(System.in);
		String c = sc.next();
		
		if(c.equalsIgnoreCase("R")) {
			Schedular s = new RoundRobn();
			s.getNextCall(); 
			s.sendCallToAgent();
		} else if(c.equalsIgnoreCase("L")) {
			Schedular s = new LeastJob();
			s.getNextCall(); 
			s.sendCallToAgent();
		} else if(c.equalsIgnoreCase("P")) {
			Schedular s = new PriorityAllocation();
			s.getNextCall(); 
			s.sendCallToAgent();
		} else {
			System.out.println("잘못 입력하셨습니다.");
		}
	}
}

 

결과 화면1

 

 

반응형
반응형

 

상속

 

: 누군가가 만들어 놓은 클래스를 가져와 이용하는 것을 말한다.

부모가 가진 속성을 그대로 가지고 온다.

 

기능이나 메소드들을 추가하여 사용하고 싶어서 상속을 이용한다.

- > 잘 사용할 시 편리하고 코드의 양을 줄일 수 있다.

 

상속은 하나만 가능하며 상속하여 메소드를 재정의할 때 오버라이드를 이용한다.

private의 접근 제한을 가진 것은 상속 대상에서 제외된다.

 

최상위 클래스 : object

 

 

package kr.or.ddit.study07;

public class Computer {
	
	public void run() {
		System.out.println("컴퓨터 동작");
	}
}

 

package kr.or.ddit.study07;

public class Computer486 extends Computer {
	
	// 오버라이드 : 부모 클래스에서 만든 메소드를 재정의하여 사용한다.
	@Override
	public void run() {
		System.out.println("486 컴퓨터 동작");
		
		// super : 부모의 run 메소드
//		super.run();
	}
	
	public void monitor() {
		System.out.println("모니터 동작");
	}
	
}

 

package kr.or.ddit.study07;

public class ComputerI5 extends Computer{
	
}

 

package kr.or.ddit.study07;

public class ComputerMain {
	public static void main(String[] args) {
		Computer486 c486 = new Computer486();
		// 오버라이드를 사용하여 재정의함
		c486.run();
		c486.monitor();
		
		ComputerI5 cI5 = new ComputerI5();
		cI5.keyboard();
		cI5.mouse();
		cI5.run();
	}
}

 

결과 화면1

 

 

package kr.or.ddit.study07.phone;

public class Phone {
	
	public void call() {
		System.out.println("LTE 전화");
	}
	
	public void camera() {
		System.out.println("찰칵");
	}
}

 

package kr.or.ddit.study07.phone;

public class DmbPhone extends Phone{
	
	public void dmb() {
		System.out.println("tv 시청");
	}
}

 

package kr.or.ddit.study07.phone;

public class SmartPhone extends Phone{
	public void touch() {
		System.out.println("터치 기능 추가");
	}
	
	public void internet() {
		System.out.println("인터넷 접속 추가");
	}
}

 

package kr.or.ddit.study07.phone;

public class IPhone extends SmartPhone{
	
	@Override
	public void camera() {
		System.out.println("1000만 화소 카메라");
	}
	
	public void appstore() {
		System.out.println("앱스토어 접속");
	}
}

 

package kr.or.ddit.study07.phone;

public class PhoneMain {
	public static void main(String[] args) {
		System.out.println("Phone");
		Phone phone = new Phone();
		phone.call();
		phone.camera();
		System.out.println();
		
		System.out.println("DmbPhone");
		DmbPhone dmbPhone = new DmbPhone();
		dmbPhone.camera();
		dmbPhone.call();
		dmbPhone.dmb();
		System.out.println();
		
		System.out.println("SmartPhone");
		SmartPhone smartPhone = new SmartPhone();
		smartPhone.internet();
		smartPhone.call();
		smartPhone.camera();
//		smartPhone.touch();
		System.out.println();
		
		System.out.println("IPhone");
		IPhone iPhone = new IPhone();
		iPhone.camera();
		iPhone.appstore();
	}
}

 

결과 화면2

 

 

package kr.or.ddit.study07.Pen;

public class Pen {
	private int amount; // 남은 양
	private String color; // 볼펜 색
	
	public int getAmount() {
		return amount;
	}
	
	public void setAmount(int amount) {
		this.amount = amount;
	}
}

 

package kr.or.ddit.study07.Pen;

public class SharpPencil extends Pen{ // 샤프펜슬
	private int width; // 펜의 굵기
}

 

package kr.or.ddit.study07.Pen;

public class Ballpen extends Pen{ // 볼펜
	private String color; // 볼펜의 색
	
	public String setColor() {
		return color;
	}
	
	public void setColor(String color) {
		this.color = color;
	}
	
}

 

package kr.or.ddit.study07.Pen;

public class FountainPen extends Ballpen{ // 만년필
//	private int amount; // 남은 양
//	private String color; // 볼펜 색
	
//	public int getAmount() {
//		return amount;
//	}
	
//	public void setAmount(int amount) {
//		this.amount = amount;
//	}
	
//	public String getColor() {
//		return color;
//	}
	
//	public void setColor(String color) {
//		this.color = color;
//	}
	
	public void refill(int n) {
		setAmount(n);
	}
}

 

package kr.or.ddit.study07.Pen;

public class PenMain {
	public static void main(String[] args) {
		FountainPen fp = new FountainPen();
		fp.setAmount(10);
		fp.setColor("red");
		
		int amount = fp.getAmount();
		System.out.println(amount);
	}
}

 

결과 화면3

 

 

package kr.or.ddit.study07.person;

public class Person {
	private int age; // 나이
	private String name; // 이름
	private String gender; // 성별

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}
}

 

package kr.or.ddit.study07.person;

public class Student extends Person{
	private String room; // 반
	private int score; // 점수
	
	public String getRoom() {
		return room;
	}
	
	public void setRoom(String room) {
		this.room = room;
	}
	
	public int getScore() {
		return score;
	}
	
	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return "Student [room=" + room + ", score=" + score + ", getAge()=" + getAge() + ", getName()=" + getName()
				+ ", getGender()=" + getGender() + "]";
	}
	
}

 

package kr.or.ddit.study07.person;

public class SalaryMan extends Person {
	private String company; // 회사이름
	private int salary; // 연봉
	private String dept; // 부서
	
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	
	@Override
	public String toString() {
		return "SalaryMan [company=" + company + ", salary=" + salary + ", dept=" + dept + ", getAge()=" + getAge()
				+ ", getName()=" + getName() + ", getGender()=" + getGender() + "]";
	}
	
//	@Override
//	public String toString() {
//		super.getAge();
//		super.getGender();
//		super.getName();
//		return "SalaryMan [company=" + company + ", salary=" + salary + ", dept=" + dept + "]";
//	}
}

 

package kr.or.ddit.study07.person;

import java.util.Scanner;

public class PersonMain {
	public static void main(String[] args) {
		/*
		 * Person
		 * age
		 * name
		 * 성별
		 * -------------
		 * Student
		 * 반
		 * 점수
		 * -------------
		 * SalaryMan
		 * 회사 이름
		 * 연봉
		 * 부서
		 */
		
		SalaryMan sm = new SalaryMan();
		sm.setAge(20);
		sm.setName("김수연");
		sm.setGender("남");
		sm.setDept("영업");
		sm.setCompany("1g");
		System.out.println(sm);
		System.out.println();
		
		Student st = new Student();
		st.setAge(22);
		st.setName("강수수");
		st.setGender("여");
		st.setRoom("3반");
		st.setScore(345);
		System.out.println(st);
	}
}

 

결과 화면4

 

 

package kr.or.ddit.study07.shape;

public class Point {
	private int x;
	private int y;
	
	public int getX() {
		return x;
	}
	
	public void setX(int x) {
		this.x = x;
	}
	
	public int getY() {
		return y;
	}
	
	public void setY(int y) {
		this.y = y;
	}
}

 

package kr.or.ddit.study07.shape;

public class Point {
	private int x;
	private int y;
	
	Point() {
	}
	
	Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public int getX() {
		return x;
	}
	
	public void setX(int x) {
		this.x = x;
	}
	
	public int getY() {
		return y;
	}
	
	public void setY(int y) {
		this.y = y;
	}
}

 

package kr.or.ddit.study07.shape;

public class Triangle extends Shape{
	private int area;
	
	// Shape에서는 name과 point를 반드시 받았기에 Triangle에서도 반드시 받아야 함.
	Triangle(Point[] p) {
		super("삼각형", p);
	}
}

 

package kr.or.ddit.study07.shape;

public class Rectangle extends Shape{
	int area;
	
	Rectangle(String name, Point[] p) {
		// 부모 클래스에 존재함.
		super(name, p);
	}
}

 

package kr.or.ddit.study07.shape;

public class RightTriangel extends Triangle{
	
	RightTriangel(Point[] p) {
		super(p);
	}
}

 

package kr.or.ddit.study07.shape;

public class ShapeMain {
	public static void main(String[] args) {
		/*
		 * Point
		 * x, y 좌표
		 * 
		 * shape
		 * 이름
		 * Point 배열
		 * 
		 * 사각형
		 * 
		 * 삼각형
		 * 
		 */
		
		Point[] p = {new Point(0,0), new Point(2,1), new Point(1,1)};
		Triangle tr = new Triangle(p);
	}
}

 

 

 

final 클래스, final 메소드

 

+ final 변수란

수정될 수 없는 변수를 이야기 하며 변수명을 대문자로 하여 사용한다.

ex) 𝝅

 

위와 같이 final 클래스와 메소드는

수정될 수 없으상속을 할 수 없다.

 

 

 

 

다형성

 

: 사용 방법동일하지만 다양한 객체를 활용해 여러 실행결과가 나오도록 하는 것을 말한다.

부모 클래스다시 재정의한다.

 

 

 

package kr.or.ddit.study07.animal;

public class Animal {
	
	public void cry() {
	}
}

 

package kr.or.ddit.study07.animal;

public class Cat extends Animal{
	@Override
	public void cry() {
		System.out.println("야옹");
	}
}

 

package kr.or.ddit.study07.animal;

public class Dog extends Animal{
	@Override
	public void cry() {
		System.out.println("멍멍");
	}
}

 

package kr.or.ddit.study07.animal;

import java.util.Scanner;

public class AnimalMain {
	public static void main(String[] args) {
		Animal ani = null;
		
		Scanner sc = new Scanner(System.in);
		System.out.println("1. 고양이");
		System.out.println("2. 개");
		int sel = sc.nextInt();
		
		// 다형성
		if(sel == 1) {
			ani = new Cat();
		} else if(sel == 2) {
			ani = new Dog();
		}
		ani.cry();
		
	}
}

 

결과 화면5

 

 

package kr.or.ddit.study07.car;

public class Car {
	
	public void startCar() {
		System.out.println("시동을 켜다.");
	}
	
	public void turnOff() {
		System.out.println("시동을 끄다.");
	}
	
	public void stop() {
		
	}
	
	public void drive() {
		System.out.println();
	}
	
	public void run() {
		startCar();
		drive();
		stop();
		turnOff();
	}
}

 

package kr.or.ddit.study07.car;

public class AICar extends Car{
	
	@Override
	public void drive() {
		System.out.println("자율 주행을 합니다.");
	}
	
	@Override
	public void stop() {
		System.out.println("자동차가 스스로 멈춥니다.");
	}
}

 

package kr.or.ddit.study07.car;

public class ManualCar extends Car{
	@Override
	public void drive() {
		System.out.println("사람이 운전합니다.");
	}
	
	@Override
	public void stop() {
		System.out.println("사람이 브레이크를 사용하여 차를 멈춥니다.");
	}
}

 

package kr.or.ddit.study07.car;

public class CarMain {
	public static void main(String[] args) {
		/*
		 * Car
		 * run 
		 * startCar()
		 * turnOff()
		 * drive()
		 * stop()
		 * 
		 */
		
		// 부모 클래스 = 자식 클래스 : 부모 클래스에 있는 내용이 자식 클래스의 내용으로 덮어씌워짐
		// >> 오버라이드 됨
		Car c1 = new AICar();
		c1.run();
		System.out.println();
		
		Car c2 = new ManualCar();
		c2.run();
	}
}

 

결과 화면6

 

 

 

TIP

 

오버로딩, 오버라이딩의 차이점

 

  오버로딩 = 오버로드 오버라이딩 = 오버라이드
공통점 동일한 이름의 메소드 사용
차이점 파라미터만 다름 동작 방법을 재정의
예시 파라미터가 다른 생성자 생성할 때 상속 시 메소드 안의 내용을 변경할 때

 

 

반응형
반응형

 

문제

 

회원 가입의 addMember의 정보 입력 부분과 updateMember의 정보 입력 부분을 채워 넣으시오.

 

package kr.or.ddit.homework;

import java.util.Scanner;

public class HomeWork14 {
	static Scanner sc = new Scanner(System.in);
	Mem[] memList = new Mem[100];
	int cur =0;
	public static void main(String[] args) {
		HomeWork14 h14 = new HomeWork14(); 
		while(true) {
			System.out.println("1. 회원 가입.");
//			System.out.println("2. 회원 탈퇴.");
			System.out.println("3. 정보 수정.");
			System.out.println("4. 회원 전체 정보 출력.");
			int sel = sc.nextInt();
			if(sel == 1) {
				h14.addMember();
			}
			if(sel == 3) {
				h14.updateMember();
			}
			if(sel == 4) {
				h14.printMemberList();
			}
		}
	}
	
	/*
	 *   회원 가입 메소드 만들기.
	 */
	public void addMember() {
		Mem mem = new Mem();
		
		/*
		 * 정보 입력
		 */
	}
	
	/*
	 *   회원 탈퇴 메소드 만들기.
	 */
	public void removeMember() {
		/*
		 *  회원 전체 정보 출력하기.
		 */
		System.out.print("탈퇴할 회원 번호 입력.");
		int num = sc.nextInt();
		remove(num);
	}
	
	public void remove(int num) {
		Mem[] copyList = new Mem[100];
		// 추후 배포
		int add =0;
		for(int i=0; i<copyList.length; i++) {
			if(i == num) add =1;
			copyList[i] = memList[i+add];
		}
		memList = copyList;
	}
	
	/*
	 *   회원 전체 정보 출력하기.
	 */
	public void printMemberList() {
		for(int i=0; i<cur; i++) {
			Mem mem = memList[i];
			System.out.println(i + "\t" + mem);
		}
	}
	
	/*
	 *   회원 정보 수정하기.
	 */
	public void updateMember() {
		/*
		 *  회원 전체 정보 출력하기.
		 */
		printMemberList();
		
		System.out.print("수정할 회원 번호 입력. ");
		int num = sc.nextInt();
		Mem mem = memList[num];
		/*
		 * 정보 수정
		 */
	}
	
}
class Mem{
	private String id;
	private String pass;
	private String name;
	private int age;
	
	/* 
	 * 생성자 사용x
	 * getter setter 이용할것.  
	 */
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Mem [id=" + id + ", pass=" + pass + ", name=" + name + ", age=" + age + "]";
	}
}

 

 

 

정답

 

package kr.or.ddit.homework;

import java.util.Scanner;

public class HomeWork14 {
	static Scanner sc = new Scanner(System.in);
	Mem[] memList = new Mem[100];
	int cur =0;
	public static void main(String[] args) {
		HomeWork14 h14 = new HomeWork14(); 
		while(true) {
			System.out.println("1. 회원 가입.");
//			System.out.println("2. 회원 탈퇴.");
			System.out.println("3. 정보 수정.");
			System.out.println("4. 회원 전체 정보 출력.");
			int sel = sc.nextInt();
			if(sel == 1) {
				h14.addMember();
			}
			if(sel == 3) {
				h14.updateMember();
			}
			if(sel == 4) {
				h14.printMemberList();
			}
		}
	}
	
	/*
	 *   회원 가입 메소드 만들기.
	 */
	public void addMember() {
		Mem mem = new Mem();
		
		/*
		 * 정보 입력
		 */
		System.out.println("아이디를 입력하세요.");
		String id = sc.next();
		mem.setId(id);
		
		System.out.println("비밀번호를 입력하세요.");
		String pass = sc.next();
		mem.setPass(pass);

		System.out.println("이름을 입력하세요.");
		String name = sc.next();
		mem.setName(name);
		
		System.out.println("나이를 입력하세요.");
		int age = sc.nextInt();
		mem.setAge(age);
		
		memList[cur++] = mem;
	}
	
	/*
	 *   회원 탈퇴 메소드 만들기.
	 */
	public void removeMember() {
		/*
		 *  회원 전체 정보 출력하기.
		 */
		System.out.print("탈퇴할 회원 번호 입력.");
		int num = sc.nextInt();
		remove(num);
	}
	
	public void remove(int num) {
		Mem[] copyList = new Mem[100];
		// 추후 배포
		int add =0;
		for(int i=0; i<copyList.length; i++) {
			if(i == num) add =1;
			copyList[i] = memList[i+add];
		}
		memList = copyList;
	}
	
	/*
	 *   회원 전체 정보 출력하기.
	 */
	public void printMemberList() {
		for(int i=0; i<cur; i++) {
			Mem mem = memList[i];
			System.out.println(i + "\t" + mem);
		}
	}
	
	/*
	 *   회원 정보 수정하기.
	 */
	public void updateMember() {
		/*
		 *  회원 전체 정보 출력하기.
		 */
		printMemberList();
		
		System.out.print("수정할 회원 번호 입력. ");
		int num = sc.nextInt();
		Mem mem = memList[num];
		/*
		 * 정보 수정
		 */
		System.out.println("수정할 아이디를 입력하세요.");
		String id = sc.next();
		mem.setId(id);
		
		System.out.println("수정할 비밀번호를 입력하세요.");
		String pass = sc.next();
		mem.setPass(pass);

		System.out.println("수정할 이름을 입력하세요.");
		String name = sc.next();
		mem.setName(name);
		
		System.out.println("수정할 나이를 입력하세요.");
		int age = sc.nextInt();
		mem.setAge(age);
	}
	
}
class Mem{
	private String id;
	private String pass;
	private String name;
	private int age;
	
	/* 
	 * 생성자 사용x
	 * getter setter 이용할것.  
	 */
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Mem [id=" + id + ", pass=" + pass + ", name=" + name + ", age=" + age + "]";
	}
}

 

 

반응형
1 ··· 3 4 5 6 7 8 9 ··· 16