📌Q100 Class
package com.test.question.q100;
public class Q100 {
public static void main(String[] args) {
/*
● 요구사항
포장하는 직원 객체를 만드시오. 그 직원을 통해 연필, 지우개, 볼펜, 자를 포장하시오.
● 조건
static 멤버를 구현하시오.
Packer
사무용품을 포장하는 직원
상태
static pencilCount
연필 포장 개수(개)
static eraserCount
지우개 포장 개수(개)
static ballPointPenCount
볼펜 포장 개수(개)
static rulerCount
자 포장 개수(개)
행동
void packing(Pencil pencil)
연필을 검수하고 포장한다.
Pencil pencil : 연필
void packing(Eraser eraser)
지우개를 검수하고 포장한다.
Eraser eraser : 지우개
void packing(BallPointPen ballPointPen)
볼펜을 검수하고 포장한다.
BallPointPen ballPointPen : 볼펜
void packing(Ruler ruler)
자를 검수하고 포장한다.
Ruler ruler : 자
void countPacking(int type)
포장한 내용물 개수를 출력한다.
int type : 출력할 내용물의 종류
0 : 모든 내용물
1 : 연필
2 : 지우개
3 : 볼펜
4 : 자
Pencil
연필 클래스
상태
hardness
흑연 등급(4B, 3B, 2B, B, HB, H, 2H, 3H, 4H)
행동
String info()
연필의 정보를 반환한다.
Eraser
지우개 클래스
상태
size
지우개 크기(Large, Medium, Small)
행동
String info()
지우개의 정보를 반환한다.
BallPointPen
볼펜 클래스
상태
thickness
볼펜 심 두께(0.3mm, 0.5mm, 0.7mm, 1mm, 1.5mm)
color
볼펜 색상(red, blue, green, black)
행동
String info()
볼펜의 정보를 반환한다.
Ruler
자 클래스
상태
length
자 길이(30cm, 50cm, 100cm)
shape
자 형태(줄자, 운형자, 삼각자)
행동
String info()
자의 정보를 반환한다.
● 호출
//포장하는 직원
Packer packer = new Packer();
//연필
Pencil p1 = new Pencil();
p1.setHardness("HB");
packer.packing(p1);
Pencil p2 = new Pencil();
p2.setHardness("4B");
packer.packing(p2);
//지우개
Eraser e1 = new Eraser();
e1.setSize("Large");
packer.packing(e1);
//볼펜
BallPointPen b1 = new BallPointPen();
b1.setThickness(0.3);
b1.setColor("black");
packer.packing(b1);
BallPointPen b2 = new BallPointPen();
b2.setThickness(1.5);
b2.setColor("red");
packer.packing(b2);
//자
Ruler r1 = new Ruler();
r1.setLength(30);
r1.setShape("줄자");
packer.packing(r1);
//결과 확인
packer.countPacking(0);
packer.countPacking(1);
packer.countPacking(2);
packer.countPacking(3);
packer.countPacking(4);
● 출력
포장 전 검수 : HB 진하기 연필입니다. //packer.packing(p1);
포장을 완료했습니다.
포장 전 검수 : 4B 진하기 연필입니다. //packer.packing(p2);
포장을 완료했습니다.
포장 전 검수 : Large 사이즈 지우개입니다. //packer.packing(e1);
포장을 완료했습니다.
포장 전 검수 : black 색상 0.3mm 볼펜입니다. //packer.packing(b1);
포장을 완료했습니다.
포장 전 검수 : red 색상 1.5mm 볼펜입니다. //packer.packing(b2);
포장을 완료했습니다.
포장 전 검수 : 30cm 줄자입니다. //packer.packing(r1);
포장을 완료했습니다.
//packer.countPacking(0);
=====================
포장 결과
=====================
연필 2회
지우개 1회
볼펜 2회
자 1회
//packer.countPacking(1);
=====================
포장 결과
=====================
연필 2회
//packer.countPacking(2);
=====================
포장 결과
=====================
지우개 1회
//packer.countPacking(3);
=====================
포장 결과
=====================
볼펜 2회
//packer.countPacking(4);
=====================
포장 결과
=====================
자 1회
*/
Packer packer = new Packer();
//연필
Pencil p1 = new Pencil();
p1.setHardness("HB");
packer.packing(p1);
Pencil p2 = new Pencil();
p2.setHardness("4B");
packer.packing(p2);
//지우개
Eraser e1 = new Eraser();
e1.setSize("Large");
packer.packing(e1);
//볼펜
BallPointPen b1 = new BallPointPen();
b1.setThickness(0.3);
b1.setColor("black");
packer.packing(b1);
BallPointPen b2 = new BallPointPen();
b2.setThickness(1.5);
b2.setColor("red");
packer.packing(b2);
//자
Ruler r1 = new Ruler();
r1.setLength(30);
r1.setShape("줄자");
packer.packing(r1);
//결과 확인
packer.countPacking(0);
packer.countPacking(1);
packer.countPacking(2);
packer.countPacking(3);
packer.countPacking(4);
}
}
📌Packer Class
package com.test.question.q100;
class Text <T extends Product>{
StringBuilder txt = new StringBuilder(); // 제품 검수 결과 메시지
boolean isresult = false; // 제품 검수 결과
// 제품 검수 조건
String[] pencilHardnessList = { "4B", "3B", "2B", "B", "HB", "H", "2H", "3H", "4H" };
String[] eraserSizeList = { "Large", "Medium", "Small" };
double[] ballPointPenThicknessList = { 0.3, 0.5, 0.7, 1, 1.5 };
String[] ballPointPenColorList = { "red", "blue", "green", "black" };
int[] rulerLengthList = { 30, 50, 100 };
String[] rulerShapeList = { "줄자", "운형자", "삼각자" };
// 정수형 타입 제품 검수 메서드
void productInspect(int product, int[] list) {
isresult = false;
txt.setLength(0);
txt.append("포장 전 검수 : ");
for (int i = 0; i < list.length; i++) {
if (product == list[i]) {
isresult = true;
break;
}
}
}
// 실수형 타입 제품 검수 메서드
void productInspect(double product, double[] list) {
isresult = false;
txt.setLength(0);
txt.append("포장 전 검수 : ");
for (int i = 0; i < list.length; i++) {
if (product == list[i]) {
isresult = true;
break;
}
}
}
// 문자형 타입 제품 검수 메서드
void productInspect(String product, String[] list) {
isresult = false;
txt.setLength(0);
txt.append("포장 전 검수 : ");
for (int i = 0; i < list.length; i++) {
if (product.equals(list[i])) {
isresult = true;
break;
}
}
}
int productInspectResult(T product, int productcount) {
if (isresult) {
productcount++;
txt.append(product.info()).append("입니다.\n");
txt.append("포장을 완료했습니다.");
} else {
txt.append("포장을 실패했습니다.");
}
return productcount;
}
}
interface Product {
String info();
}
class Packer extends Text {
private static int pencilCount = 0; // 연필 포장 개수(개)
private static int eraserCount = 0; // 지우개 포장 개수(개)
private static int ballPointPenCount = 0; // 볼펜 포장 개수(개)
private static int rulerCount = 0; // 자 포장 개수(개)
void packing(Pencil pencil) {
// 연필 흑연 등급 검수
productInspect(pencil.getHardness(), pencilHardnessList);
// 제품 검수 결과에 따른 개수 누적
pencilCount = productInspectResult(pencil, pencilCount);
/*
if (isresult) {
pencilCount++;
txt.append(pencil.info() + "입니다.\n");
txt.append("포장을 완료했습니다.");
} else {
txt.append("포장을 실패했습니다.");
}
*/
System.out.println(txt);
}
void packing(Eraser eraser) {
// 지우개 크기 검수
productInspect(eraser.getSize(), eraserSizeList);
// 제품 검수 결과에 따른 개수 누적
eraserCount = productInspectResult(eraser, eraserCount);
System.out.println(txt);
}
void packing(BallPointPen ballPointPen) {
// 볼펜 심 두께 검수
productInspect(ballPointPen.getThickness(), ballPointPenThicknessList);
// 볼펜 색상 검수
productInspect(ballPointPen.getColor(), ballPointPenColorList);
// 제품 검수 결과에 따른 개수 누적
ballPointPenCount = productInspectResult(ballPointPen, ballPointPenCount);
System.out.println(txt);
}
void packing(Ruler ruler) {
// 자 길이 검수
productInspect(ruler.getLength(), rulerLengthList);
// 자 형태 검수
productInspect(ruler.getShape(), rulerShapeList);
// 제품 검수 결과에 따른 개수 누적
rulerCount = productInspectResult(ruler, rulerCount);
System.out.println(txt);
}
void countPacking(int type) {
txt.setLength(0);
txt.append("=====================\n");
txt.append("포장 결과\n");
txt.append("=====================\n");
if (type == 0) {
txt.append("연필 " + pencilCount + "회\n");
txt.append("지우개 " + eraserCount + "회\n");
txt.append("볼펜 " + ballPointPenCount + "회\n");
txt.append("자 " + rulerCount + "회\n");
} else if (type == 1) {
txt.append("연필 " + pencilCount + "회\n");
} else if (type == 2) {
txt.append("지우개 " + eraserCount + "회\n");
} else if (type == 3) {
txt.append("볼펜 " + ballPointPenCount + "회\n");
} else if (type == 4) {
txt.append("자 " + rulerCount + "회\n");
}
System.out.println(txt);
}
}
📌Pencil Class
package com.test.question.q100;
class Pencil implements Product {
private String hardness;
public String getHardness() {
return hardness;
}
public void setHardness(String hardness) {
this.hardness = hardness;
}
@Override
public String info() {
return String.format("%s 진하기 연필", this.hardness);
}
}
📌Eraser Class
package com.test.question.q100;
class Eraser implements Product {
private String size;
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
@Override
public String info() {
return String.format("%s 사이즈 지우개", this.size);
}
}
📌BallPointPen Class
package com.test.question.q100;
class BallPointPen implements Product {
private double thickness;
private String color;
public double getThickness() {
return thickness;
}
public void setThickness(double thickness) {
this.thickness = thickness;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String info() {
return String.format("%s 색상 %.1fmm 볼펜", this.color, this.thickness);
}
}
📌Ruler Class
package com.test.question.q100;
class Ruler implements Product {
private int length;
private String shape;
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
this.shape = shape;
}
@Override
public String info() {
return String.format("%dcm %s", this.length, this.shape);
}
}