예시 1) 요구 사항: Cookie 클래스 설계
- 상태
- 가격, 용량, 생산일자, 유통기한
- 모든 멤버 변수에는 액세스 식별자가 비공개로 설정되어 있습니다.
- 멤버 액세스를 위한 setter 및 getter를 정의합니다.
- 용량: 쓰기 전용 300g 500g 850g
- 가격 : 읽기전용, 850원(300g), 1200원(500g), 1950원(850g)
- 생산일: 쓰기만 가능(달력)
- 남은 유통기한 : 읽기전용 제조제품 유통기한 기준 : 7일(300g), 10일(500g), 15일(850g)
- Bugles 개체 메서드
- void eat() : 간식 먹기
- 사용 기한 = 유통 기한 – 현재 – 생산 시간
- 5: 먹을 날이 5일 남았다
- 3 : 식용 가능일로부터 3일 후
- 소스 코드
package com.test.question;
public class Q0094 {
public static void main(String() args) {
Q0094_Bugles snack = new Q0094_Bugles();
snack.setWeight(500);
snack.setCreationTime(2023, 2, 13);
System.out.printf("가격 : %,d 원\n",snack.getPrice());
System.out.println("유통 기한이 " + snack.getExpiration() + "일 남았습니다.");
snack.eat();
System.out.println();
Q0094_Bugles snack2 = new Q0094_Bugles();
snack2.setWeight(300);
snack2.setCreationTime(2023, 2, 5);
System.out.printf("가격 : %,d 원\n",snack2.getPrice());
System.out.println("유통 기한이 " + snack2.getExpiration() + "일 남았습니다.");
snack2.eat();
}
}
package com.test.question;
import java.util.Calendar;
public class Q0094_Bugles {
private int price;
private int weight;
private Calendar creationTime;
private int expiration;
int time = 0;
int money = 0;
//******************************
public int getPrice() {
return price;
}
//******************************
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
if(weight==300||weight==500||weight==850) {
this.weight = weight;
}else {
System.out.println("용량을 잘 못 입력하셨습니다.");
}
if(weight==300) {
this.price = 850;
this.expiration = 7;
}else if(weight==500) {
this.price = 1200;
this.expiration = 10;
}else if(weight==850) {
this.price = 1950;
this.expiration = 15;
}
}
//******************************
public void setCreationTime(int year, int month, int date) {
Calendar creationTime = Calendar.getInstance();
creationTime.set(year, month-1, date);
this.creationTime = creationTime;
}
//******************************
public int getExpiration() {
Calendar today = Calendar.getInstance();
return this.expiration += (int)((this.creationTime.getTimeInMillis()-today.getTimeInMillis())/1000/60/60/24);
}
public void eat() {
if(getExpiration() >= 0) {
System.out.println("과자를 맛있게 먹습니다.");
} else {
System.out.println("유통기한이 지나 먹을 수 없습니다.");
}
}
}
- 실행 결과

예시 2) 요구 사항: 직원 클래스 설계
- 상태
- Employee 개체의 정보
- 이름, 부서, 직급, 연락처, 직속상사
- 모든 멤버 변수에는 액세스 식별자가 비공개로 설정되어 있습니다.
- 멤버 액세스를 위한 setter 및 getter를 정의합니다.
- 이름 : 읽기/쓰기, 한글 2~5자 이내
- 부서: 읽기/쓰기, 영업부, 기획부, 총무부, 개발부, 홍보부
- 직위: 읽기/쓰기, 관리자, 관리자, 차장, 서기
- 연락처: 읽기/쓰기, 010-XXXX-XXXX 형식 확인
- Line Manager: 읽기/쓰기, 다른 직원 중 한 명이 같은 부서에 있어야 함(검증)
- 직원 개체 메서드
- void info() : 직원 정보 확인
- Employee 개체의 정보
- 소스 코드
package com.test.question;
public class Q0095 {
public static void main(String() args) {
Q0095_Employee e1 = new Q0095_Employee();
e1.setName("홍길동");
e1.setDepartment("홍보부");
e1.setPosition("부장");
e1.setTel("010-1234-5678");
e1.setBoss(null); //직속 상사 없음
e1.info();
Q0095_Employee e2 = new Q0095_Employee();
e2.setName("아무개");
e2.setDepartment("홍보부");
e2.setPosition("사원");
e2.setTel("010-2541-5678");
e2.setBoss(e1); //홍길동
e2.info();
}
}
package com.test.question;
public class Q0095_Employee {
private String name;
private String department;
private String position;
private String tel;
private Q0095_Employee boss;
//***********************************
public String getName() {
return name;
}
public void setName(String name) {
if(checkLength(name)&&checkKorean(name)) {
this.name = name;
} else {
System.out.println("잘못된 owner 입력");
}
}
public boolean checkKorean(String name) {
for (int i=0; i<name.length(); i++){
char c = name.charAt(i);
if(c<'가' || c>'힣') {
return false;
}
}
return true;
}
public boolean checkLength(String owner) {
if(owner.length() >= 2 && owner.length() <=5) {
return true;
}else {
return false;
}
}
//***********************************
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
if(department.equals("영업부")||department.equals("기획부")
||department.equals("총무부")||department.equals("개발부")
||department.equals("홍보부")) {
this.department = department;
}else {
System.out.println("부서를 잘 못 입력하셨습니다.");
}
}
//***********************************
public String getPosition() {
return position;
}
public void setPosition(String position) {
if(position.equals("부장")||position.equals("과장")
||position.equals("대리")||position.equals("사원")){
this.position = position;
} else {
System.out.println("직책을 잘 못 입력하셨습니다.");
}
}
//***********************************
public String getTel() {
return tel;
}
public void setTel(String tel) {
if(tel.charAt(3)=='-'&&tel.charAt(8)=='-') {
this.tel = tel;
}else {
System.out.println("전화번호를 잘 못 입력하셨습니다.");
}
String temp = tel.replace("-", "");
for(int i=0; i<temp.length(); i++) {
char c = temp.charAt(i);
if(c <'0' || c >'9') {
return;
}
}
this.tel = tel;
}
//***********************************
public Q0095_Employee getBoss() {
return boss;
}
public void setBoss(Q0095_Employee boss) {
if(boss == null) {
return;
}
if(this.name.equals(boss.getName()) && this.department.equals(boss.getDepartment())
&& this.position.equals(boss.getPosition()) && this.tel.equals(boss.getTel())) {
return;
}
if(!this.department.equals(boss.getDepartment())) {
return;
}
this.boss = boss;
}
public void info() {
System.out.printf("(%s)\n", this.name);
System.out.printf("- 부서 : %s\n", this.department);
System.out.printf("- 직위 : %s\n", this.position);
System.out.printf("- 연락처 : %s\n", this.tel);
if(this.boss != null) {
System.out.printf("- 직속상사 : %s(%s %s)\n", this.boss.getName(), this.boss.getDepartment(), this.boss.getPosition());
System.out.println();
}else {
System.out.println("- 직속상사 : 없음");
System.out.println();
}
}
}
- 실행 결과

예시 3) 요구 사항: 디자인 박스 클래스 및 마카롱 클래스.
- 상태
- 1박스에 마카롱 10개 가능 (멤버변수 = 마카롱 배열)
- 상자 개체 사용
- 박스오브젝트 생성시 마카롱오브젝트 10개(랜덤)를 박스에 넣어주세요.
- 품질 검사에 실패한 마카롱을 분류합니다.
- 마카롱 개체의 정보
- 제작사이즈(5cm ~ 15cm) → 판매사이즈(8cm ~ 14cm)
- 생산색상(빨강, 파랑, 노랑, 흰색, 분홍, 보라, 초록, 검정) → 판매색상(검정을 제외한 모든 색상)
- 생산모래두께(1mm~20mm) → 판매두께(3mm~18mm)
- 소스 코드
package com.test.question;
public class Q0096 {
public static void main(String() args) {
Q0096_Box m1 = new Q0096_Box();
m1.cook();
m1.check();
m1.list();
}
}
package com.test.question;
import java.util.Arrays;
public class Q0096_Box {
private Q0096_Macaron() list = new Q0096_Macaron(10);
public void cook() {
String () Color = {"red", "blue", "yellow", "white", "pink", "purple", "green", "black"};
for(int i=0; i<list.length; i++) {
Q0096_Macaron m = new Q0096_Macaron();
m.setSize((int)(Math.random()*11)+5);
m.setColor(Color((int)(Math.random()*Color.length)));
m.setThickness((int)(Math.random()*21));
this.list(i) = m;
}
System.out.printf("마카롱 %d개를 만들었습니다\n", list.length);
System.out.println();
}
public void check() {
int pass = 0;
int failed = 0;
for(int i=0; i<list.length; i++) {
Q0096_Macaron m = this.list(i);
if(check(m)) {
pass++;
}else {
failed++;
}
}
System.out.println("(박스 체크 결과)");
System.out.printf("QC 합격 개수 : %d 개\n", pass);
System.out.printf("QC 불합격 개수 : %d 개\n", failed);
System.out.println();
}
public void list() {
System.out.println("(마카롱 목록)");
for(int i=0; i<list.length; i++) {
Q0096_Macaron m = this.list(i);
if(check(m)) {
System.out.printf("%d번 마카롱 : %dcm(%s,%dmm) : 합격\n", i, m.getSize(), m.getColor(), m.getThickness() );
}
else {
System.out.printf("%d번 마카롱 : %dcm(%s,%dmm) : 불합격\n", i, m.getSize(), m.getColor(), m.getThickness() );
}
}
}
public boolean check(Q0096_Macaron m) {
if(m.getSize()<8||m.getSize()>14) {
return false;
}
if(m.getColor().equals("black")) {
return false;
}
if(m.getThickness()<3 || m.getThickness()>18) {
return false;
}
return true;
}
}
package com.test.question;
public class Q0096_Macaron {
private int size;
private String color;
private int thickness;
//****************************
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getThickness() {
return thickness;
}
public void setThickness(int thickness) {
this.thickness = thickness;
}
}
- 실행 결과

예 4) 요건: 디자인 냉장고 등급 및 물품 등급.
- 상태
- 냉장고 객체의 정보
- 최대 100개 항목 저장 가능(구성원 변수 = 항목 배열)
- 냉장고 개체 사용
- 항목을 냉장고에 넣으십시오. 무효 추가(항목 항목);
- 냉장고에서 물건을 꺼내십시오. 아이템 get(문자열명);
- 냉장고에 있는 품목의 수를 확인하십시오. 정수 카운트();
- 냉장고에 있는 물건을 확인하세요. 무효 listItem();
- 항목 개체 정보
- 식품명, 유통기한
- 냉장고 객체의 정보
- 소스 코드
package com.test.question;
public class Q0097 {
public static void main(String() args) {
Q0097_Refrigerator r = new Q0097_Refrigerator();
Q0097_item i1 = new Q0097_item();
i1.setName("김치");
i1.setExpiration("2023-03-04");
r.add(i1); //냉장고에 넣기
Q0097_item i2 = new Q0097_item();
i2.setName("깍두기");
i2.setExpiration("2023-02-25");
r.add(i2); //냉장고에 넣기
Q0097_item i3 = new Q0097_item();
i3.setName("멸치볶음");
i3.setExpiration("2023-02-27");
r.add(i3); //냉장고에 넣기
r.listItem();
Q0097_item i4 = r.get("깍두기");
System.out.printf("%s의 유통기한 : %s\n", i4.getName(), i4.getExpiration());
System.out.printf("냉장고 안의 총 아이템 개수 : %d개\n", r.count());
r.listItem();
}
}
package com.test.question;
import java.util.Calendar;
public class Q0097_item {
private String name;
private String expiration;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getExpiration() {
return expiration;
}
public void setExpiration(String expiration) {
this.expiration = expiration;
}
}
package com.test.question;
public class Q0097_Refrigerator {
private Q0097_item() list = new Q0097_item(100);
private int index = 0;
public void add(Q0097_item item) {
Q0097_item t = new Q0097_item();
list(index)=item;
index++;
System.out.printf("'%s'를 냉장고에 넣었습니다.\n",item.getName());
System.out.println();
}
public Q0097_item get(String name) {
Q0097_item item = null;
int itemIndex = -1;
for(int i=0; i<index; i++) {
if(this.list(i).getName().equals(name)){
item = this.list(i);
itemIndex = i;
this.index--;
break;
}
}
if (item != null) {
for(int i=itemIndex; i<index; i++) {
this.list(i) = this.list(i+1);
}
}
return item;
}
public int count() {
return this.index;
}
public void listItem() {
System.out.println("(냉장고 아이템 목록)");
if(index>0) {
for(int i=0; i<index; i++) {
Q0097_item t = this.list(i);
System.out.printf("%s(%s)\n",t.getName(), t.getExpiration());
}
}
else if(index<0) {
System.out.println("냉장고 안에 물건이 없습니다.");
}
System.out.println();
}
}
- 실행 결과

예 5) 요구 사항: 학생 클래스를 구현합니다.
- 상태
- 생성자 오버로드를 구현합니다.
- 대학생
- 학생 수업
- 상황
- 이름 이름
- 나이: 나이
- 클래스: 클래스
- 클래스 번호: 하프
- 번호: 번호
- 행동
- 공립학생()
- public Student(문자열 이름, int age, int grade, int classNumber, int number)
- public Student(문자열 이름, 정수 age)
- public student(int grade, int classNumber, int number)
- 문자열 정보()
- 소스 코드
package com.test.question;
public class Q0098 {
public static void main(String() args) {
//학생 1
Q0098_Student s1 = new Q0098_Student();
System.out.println(s1.info());
//학생 2
Q0098_Student s2 = new Q0098_Student("홍길동", 13);
System.out.println(s2.info());
//학생 3
Q0098_Student s3 = new Q0098_Student(3, 10, 30);
System.out.println(s3.info());
//학생 4
Q0098_Student s4 = new Q0098_Student("아무개", 12, 1, 5, 11);
System.out.println(s4.info());
}
}
package com.test.question;
public class Q0098_Student {
private String name;
private int age;
private int grade;
private int classNumber;
private int number;
public Q0098_Student() {
name = "미정";
age = 0;
grade = 0;
classNumber = 0;
number =0;
}
public Q0098_Student(String name, int age) {
this.name = name;
this.age = age;
}
public Q0098_Student(String name, int age, int grade, int classNumber, int number) {
this.name = name;
this.age = age;
this.grade = grade;
this.classNumber = classNumber;
this.number = number;
}
public Q0098_Student(int grade, int classNumber, int number) {
this.name = "미정";
this.grade=grade;
this.classNumber = classNumber;
this.number = number;
}
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;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getClassNumber() {
return classNumber;
}
public void setClassNumber(int classNumber) {
this.classNumber = classNumber;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String info() {
return String.format("%s(나이 : %s, 학년 : %s, 반 : %s, 번호 : %s)"
, this.name
, age != 0? this.age + "세" : "미정"
, grade !=0? this.grade + "학년" : "미정"
, classNumber !=0? this.classNumber + "반" : "미정"
, number !=0? this.number : "미정");
}
}
- 실행 결과

예 6) 요구 사항: 시간 클래스를 구현합니다.
- 상태
- 생성자 오버로드를 구현합니다.
- 2자리 출력
- 시간
- 시간 클래스
- 상황
- 시간: 시간(0보다 크거나 같은 양의 정수)
- 분: 분(0보다 크거나 같은 양의 정수)
- 초: 초(0보다 크거나 같은 양의 정수)
- 행동
- 공개시간()
- 공개 시간(int 시, int 분, int 초)
- 공개 시간(int 분, int 초)
- 공개 시간(int 초)
- 문자열 정보()
- 소스 코드
package com.test.question;
public class Q0099 {
public static void main(String() args) {
Q0099_Time t1 = new Q0099_Time();
System.out.println(t1.info());
Q0099_Time t2 = new Q0099_Time(2,30,45);
System.out.println(t2.info());
Q0099_Time t3 = new Q0099_Time(1,70,30);
System.out.println(t3.info());
Q0099_Time t4 = new Q0099_Time(30,10);
System.out.println(t4.info());
Q0099_Time t5 = new Q0099_Time(90,10);
System.out.println(t5.info());
Q0099_Time t6 = new Q0099_Time(50);
System.out.println(t6.info());
Q0099_Time t7 = new Q0099_Time(10000);
System.out.println(t7.info());
}
}
package com.test.question;
public class Q0099_Time {
private int hour;
private int minute;
private int second;
public Q0099_Time() {
}
public Q0099_Time(int hour, int minute, int second) {
this.hour = hour;
this.minute = minute;
this.second = second;
}
public Q0099_Time(int minute, int second) {
this.minute = minute;
this.second = second;
}
public Q0099_Time(int second) {
this.second = second;
}
String info() {
int hour_plus = 0;
int minute_plus = 0;
if(this.minute>=60) {
hour_plus=this.minute/60;
this.minute=this.minute%60;
this.hour+=hour_plus;
}
if(this.second>=60) {
minute_plus=this.second/60;
this.second=this.second%60;
this.minute+=minute_plus;
if(this.minute>=60) {
hour_plus=this.minute/60;
this.minute=this.minute%60;
this.hour+=hour_plus;
}
}
return String.format("%02d:%02d:%02d", this.hour,this.minute,this.second);
}
}
- 실행 결과
