JAVA STEP 26.

예시 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("유통기한이 지나 먹을 수 없습니다.");
		}
	}
	
}
  • 실행 결과


실시예 1 실행 결과

예시 2) 요구 사항: 직원 클래스 설계

  • 상태
    • Employee 개체의 정보
      • 이름, 부서, 직급, 연락처, 직속상사
    • 모든 멤버 변수에는 액세스 식별자가 비공개로 설정되어 있습니다.
    • 멤버 액세스를 위한 setter 및 getter를 정의합니다.
      • 이름 : 읽기/쓰기, 한글 2~5자 이내
      • 부서: 읽기/쓰기, 영업부, 기획부, 총무부, 개발부, 홍보부
      • 직위: 읽기/쓰기, 관리자, 관리자, 차장, 서기
      • 연락처: 읽기/쓰기, 010-XXXX-XXXX 형식 확인
      • Line Manager: 읽기/쓰기, 다른 직원 중 한 명이 같은 부서에 있어야 함(검증)
    • 직원 개체 메서드
      • void info() : 직원 정보 확인
  • 소스 코드
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();
		}
	}
	
}
  • 실행 결과


예제 2의 실행 결과

예시 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;
	}
	
	
}
  • 실행 결과


실시예 3의 실행 결과

예 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();
	}
}
  • 실행 결과


실시예 4 실행 결과

예 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 : "미정");
	}
	
}
  • 실행 결과


실시예 5 실행 결과

예 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);
	
	
}


}
  • 실행 결과


실시예 6의 실행 결과