말은 뭔가 멋져보이지만 사실은 그냥 UML표를 보고 클래스 구조짜는 연습이다.
솔직히 내가한게 다이어그램 이라는 용어가 맞는지도 의문이다. GPT한태 물어봤기 때문..
자료는 총 3가지가 있다.
설명까지 적기엔 본인은 너무 게으르기에..일단 코드만 적어올렸다. (설명은 언젠간..)

package com.oop21.cafe;
public abstract class Beverage {
private String name;
private int price;
public Beverage(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
abstract void prepare();
}
package com.oop21.cafe;
public class Americano extends Beverage{
public Americano(String name, int price) {
super(name, price);
}
@Override
void prepare() {
System.out.println("에스프레소에 물을 붓습니다.");
}
}
package com.oop21.cafe;
public class Latte extends Beverage {
public Latte(String name, int price) {
super(name, price);
}
@Override
void prepare() {
System.out.println("에스프레소에 우유를 넣습니다.");
}
}
package com.oop21.cafe;
import java.util.Scanner;
public class Cafe {
public static void main(String[] args) {
Beverage americano = new Americano("아메리카노", 3000);
Beverage latte = new Latte("라떼", 4500);
americano.prepare();
System.out.println(americano.getName() + "나왔습니다. 가격은 : " + americano.getPrice() + "원 입니다.");
System.out.println("-----");
latte.prepare();
System.out.println(latte.getName() + "나왔습니다. 가격은 : " + latte.getPrice() + "원 입니다.");
System.out.println("-----");
System.out.println();
System.out.println("주문 : " + americano.getName() + ", " + latte.getName());
System.out.println("총 금액 : " + (americano.getPrice() + latte.getPrice()));
}
}


보시다시피 3번째가 2번째에서 확장시킨 버전이기에 한 번에 진행했다.
package com.oop21.employeeSalary;
public interface Payable {
int calculatePay();
}
package com.oop21.employeeSalary;
public abstract class Employee implements Payable{
private String name;
private int id;
public Employee(String name, int id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
abstract void printInfo();
}
package com.oop21.employeeSalary;
public class FullTimeEmployee extends Employee implements Bonusable{
private int monthlySalary;
public int getMonthlySalary() {
return monthlySalary;
}
public FullTimeEmployee(String name, int id, int monthlySalary) {
super(name, id);
this.monthlySalary = monthlySalary;
}
@Override
public int calculatePay() {
return monthlySalary;
}
@Override
public int calculateBonus() {
return monthlySalary * 2;
}
@Override
void printInfo() {
System.out.println("[" + getId() + "] " + getName());
System.out.println("급여 : " + calculatePay() + "원");
}
}
package com.oop21.employeeSalary;
public class PartTimeEmployee extends Employee {
private int hourlyWage;
private int workHours;
public PartTimeEmployee(String name, int id, int hourlyWage, int workHours) {
super(name, id);
this.hourlyWage = hourlyWage;
this.workHours = workHours;
}
@Override
public int calculatePay() {
return workHours * hourlyWage;
}
@Override
void printInfo() {
System.out.println("[" + getId() + "] " + getName());
System.out.println("이번 달 알바시간 : " + workHours + "시간");
System.out.println("급여 : " + calculatePay());
}
}
package com.oop21.employeeSalary;
public interface Payable {
int calculatePay();
}
package com.oop21.employeeSalary;
public class Manager extends FullTimeEmployee {
private int allowance;
public Manager(String name, int id, int monthlySalary, int allowance) {
super(name, id, monthlySalary);
this.allowance = allowance;
}
@Override
public int calculatePay() {
return getMonthlySalary() + allowance;
}
@Override
void printInfo() {
System.out.println("[" + getId() + "] " + getName());
System.out.println("직책 수당 : " + allowance + "원");
System.out.println("급여 : " + calculatePay() + "원");
System.out.println("보너스 : " + calculateBonus() + "원");
}
}
package com.oop21.employeeSalary;
public class payrollMain {
public static void main(String[] args) {
Employee fullTime = new FullTimeEmployee("김정규", 1001, 3_200_000);
Employee partTime = new PartTimeEmployee("달유메", 2001, 80, 10_320);
Employee manager = new Manager("박팀장", 1002, 4_000_000, 500_000);
fullTime.printInfo();
System.out.println("-----");
partTime.printInfo();
System.out.println("-----");
manager.printInfo();
}
}