📌Q093 Class
package com.test.question.q93;
public class Q093 {
public static void main(String[] args) {
/*
● 요구사항
Note 클래스를 설계하시오.
● 조건
- Note 객체의 정보
- 크기, 표지 색상, 페이지수, 소유자이름, 가격
- 모든 멤버 변수의 접근 지정자는 private으로 한다.
- 멤버 접근을 위한 Setter와 Getter를 정의한다.
- 크기 : 쓰기 전용, A3, A4, A5, B3, B4, B5
- 표지 색상 : 쓰기 전용, 검정색, 흰색, 노란색, 파란색
- 페이지수 : 쓰기 전용, 10 ~ 200페이지 이내
- (+) 10~50(얇다), 51 ~ 100(보통), 101 ~ 200(두껍다)
- 소유자이름 : 쓰기 전용, 한글 2~5자이내. 필수값
- 가격 : Setter,Getter 구현 안함. 추후 info() 메소드에서 사용하기 위해 아래와 같은 규칙으로 계산
- (+) 기본 노트 : A5 + 흰색 + 10페이지 = 가격(500원)
- (+) 크기 변경 : A3(+400원), A4(+200원), B3(+500원), B4(+300원), B5(+100원)
- (+) 색상 변경 : 검정색(+100원), 노란색(+200원), 파란색(+200원)
- (+) 페이지수 변경 : 페이지 당 x 10원 추가
- Note 객체의 정보를 확인하기 위한 메소드를 구현한다.
- String info()
- Note가 잘 설계되었는지 객체를 가지고 사용해본다.
- Note 객체 생성 → 값 넣기 + 값 출력 등
● 기초 코드
class Note {
private String size;
private String color;
private int page;
private String owner;
private int price;
//setter, getter 구현
public String info() {
return ..
}
}
● 호출
Note note = new Note();
note.setSize("B4");
note.setColor("노란색");
note.setPage(25);
note.setOwner("홍길동");
System.out.println(note.info());
Note note2 = new Note();
note2.setSize("A4");
note2.setColor("검정색");
note2.setPage(100);
System.out.println(note2.info());
● 출력
■■■■■■ 노트 정보 ■■■■■■
소유자 : 홍길동
특성 : 노란색 얇은 B4노트
가격 : 1,150원
■■■■■■■■■■■■■■■■■■■■■■
■■■■■■ 노트 정보 ■■■■■■
주인 없는 노트
■■■■■■■■■■■■■■■■■■■■■■
*/
Note note = new Note();
note.setSize("B4");
note.setColor("노란색");
note.setPage(25);
note.setOwner("홍길동");
System.out.println(note.info());
Note note2 = new Note();
note2.setSize("A4");
note2.setColor("검정색");
note2.setPage(100);
System.out.println(note2.info());
}
}
📌Note Class
package com.test.question.q93;
import java.text.DecimalFormat;
public class Note {
DecimalFormat formatter = new DecimalFormat("###,###");
private String size;
private String color;
private int page;
private String owner;
private int price = 0;
private int priceSum = 0;
private String thickness;
// 덤프 메소드 (노트 정보 출력 메소드)
public String info() {
// 문자열(null)
// null은 객체가 아니다
// if (owner != null) > 연산자 사용 > 주소값 비교
// 문자열("")
// if (owner.equals("")) > 메소드 사용 > 값 비교
// 소유자 정보에 따라 출력
if (this.owner != null) {
return String.format("■■■■■■ 노트 정보 ■■■■■■\n"
+ "소유자: %s\n"
+ "특성: %s%s%s 노트\n"
+ "가격: %s원\n"
+ "■■■■■■■■■■■■■■■■■■■■■■■\r\n",
this.owner, this.color, this.thickness, this.size, formatter.format(this.price));
} else {
return "■■■■■■ 노트 정보 ■■■■■■\n"
+ "주인 없는 노트\n"
+ "■■■■■■■■■■■■■■■■■■■■■■■\r\n";
}
/*
// 다른 방법
if (this.owner != null) {
return String.format("■■■■■■ 노트 정보 ■■■■■■\n"
+ "소유자 : " + this.owner + "\n"
+ "특성 : " + this.color
+ (Integer.valueOf(this.page) <= 50 ?
" 얇은 " : Integer.valueOf(this.page) <= 100 ?
" 보통 " : Integer.valueOf(this.page) <= 200 ?
" 두꺼운 ": "")
+ this.size + "노트 \n"
+ "가격: " + formatter.format(priceSum) + "원\n"
+ "■■■■■■■■■■■■■■■■■■■■■■\r\n");
} else {
return String.format("■■■■■■ 노트 정보 ■■■■■■\n"
+ "주인 없는 노트" + "\n"
+ "■■■■■■■■■■■■■■■■■■■■■■\r\n");
}
*/
}
// 크기: A3, A4, A5, B3, B4, B5
public void setSize(String size) {
String[] sizeList = {"A3", "A4", "A5", "B3", "B4", "B5"};
for (String s : sizeList) {
if (size.equals(s)) {
this.size = size;
}
}
// 크기 추가요금
if (this.size.equals("A5")) {
this.price += 500; // 기본 요금
} else {
this.price += 500; // 기본 요금
if (this.size.equals("A3")) {
this.price += 400;
} else if (this.size.equals("A4")) {
this.price += 200;
} else if (this.size.equals("B3")) {
this.price += 500;
} else if (this.size.equals("B4")) {
this.price += 300;
} else if (this.size.equals("B5")) {
this.price += 100;
}
}
}
// 표지 색상: 검정색, 흰색, 노란색, 파란색
public void setColor(String color) {
String[] colorList = {"검정색", "흰색", "노란색", "파란색"};
for (String c : colorList) {
if (color.equals(c)) {
this.color = color;
}
}
// 표지 색상 추가 요금
if (color.equals("검정색")) {
this.price += 100;
} else if (color.equals("노란색")) {
this.price += 200;
} else if (color.equals("파란색")) {
this.price += 200;
}
}
// 페이지수: 10 ~ 200페이지 이내
// (+) 10~50(얇다), 51 ~ 100(보통), 101 ~ 200(두껍다)
public void setPage(int page) {
if (page >= 10 && page <= 200) {
this.page = page;
}
// 페이지수 추가요금
this.price += (this.page - 10) * 10;
// 두께 검증
thickness = (page <= 50) ? " 얇은 " : (page <= 100) ? " 보통 " : (page <= 200) ? " 두꺼운 " : "";
/*
// 다른 방법: 조건에 맞지 않는 것을 찾음
if (page < 10 || page > 200) {
return;
}
*/
}
// 소유자이름: 한글 2~5자이내. 필수값
public void setOwner(String owner) {
// 유효성 검사
// - 검사할 기준이 1개일 경우: 무관
// - 검사할 기준이 N개일 경우: 잘못된 것을 찾는다.
if (owner.length() >= 2 && owner.length() <= 5 && owner.matches("[가-힣]*")) {
this.owner = owner;
}
/*
// 다른 방법
if (owner.length() < 2 || owner.length() > 5) {
return;
}
for (int i=0; i<owner.length(); i++) {
char c = owner.charAt(i);
if (c < '가' || c > '힣') {
return;
}
}
*/
}
}