private <-> public
For example,
구매자가 입력하면 안되는 값을 public으로 지정하면 아무나 접근해서 값을 수정할 수 있음.
private으로 지정하면 그 값을 임의로 지정할 수 없음.
직접적으로 sysout을 이용하여 조회도 불가능.
Code
public class Account {
private int balance;
private String owner;
public Account() {}
public Account(int balance, String owner) {
setBalance(balance);
this.owner=owner;
}
void setBalance (int balance) {
//잔액 설정
if (balance >=0) {
this.balance = balance;
}
else {
System.out.println("잔액은 음수값을 넣을 수 없습니다.");
}
}
int getBalance() {
//잔액 가져오기
return this.balance;
}
void setOwner (String owner) {
// 소유자 설정
this.owner = owner;
}
String getOwner () {
//소유자 가져오기
return this.owner;
}
void withdraw (int money) {
//출금
System.out.println("출금 신청 액 : " + money + "원");
if (money < 0) {
System.out.println("출금액이 잘못 입력되었습니다.");
}
else if (money > this.balance) {
System.out.println("잔액이 부족합니다.");
}
else {
System.out.println(money + "원을 출금했습니다. (잔액 : " + (this.balance-money) + "원)");
this.balance -= money;
}
}
void deposit (int money) {
//입금
System.out.println("입금 신청 액 : " + money + "원");
if (money < 0) {
System.out.println("입금액이 잘못 입력되었습니다.");
}
else {
System.out.println(money + "원을 입금했습니다. (잔액 : " + (this.balance+money) + "원)");
this.balance += money;
}
}
void showInfo() {
// 계좌 정보보기
System.out.println("소유주 : " + this.owner + " / 잔액 : " + this.balance + "원");
}
위에 작성된 메서드를 메인에서 이용
public class AccountMain {
public static void main(String[] args) {
Account account = new Account(10000, "빅데이터");
account.showInfo();
account.withdraw(100000);
account.withdraw(-100000);
account.withdraw(1000);
account.deposit(35000);
account.deposit(-10000);
account.showInfo();
}
}
public class KurlyProduct {
private final String[] delivery = {"일반택배", "샛별배송", "낮배송"};
private String prod_img; // 상품 이미지 파일
private String prod_manugaturer; // 상품 제조사
private String prod_title; // 상품 명
private String prod_sub_title; // 상품 부제목
private int prod_price; // 상품 가격 // private 은 직접접근 금지 키워드 = 직접 값 넣는 것 금지
private double prod_discount_rate; // 상품 할인율 // private 은 직접접근 금지 키워드 = 직접 값 넣는 것 금지
private double prod_point_rate; // 상품 적립율 // private 은 직접접근 금지 키워드 = 직접 값 넣는 것 금지
private int prod_delivery_type; // 배송타입 0 -일반 택배 / 1 - 샛별배송 / 2 - 낮배송 // private 은 직접접근 금지 키워드 = 직접 값 넣는 것 금지
private String prod_seller; // 상품 판매자
private String prod_unit; // 상품 판매단위
private String prod_quantity; // 상품 용량
private String prod_notice; // 상품 안내사항
private int prod_stock; // 상품 재고 // private 은 직접접근 금지 키워드 = 직접 값 넣는 것 금지
public KurlyProduct () {}
public KurlyProduct (String[] attr, int price, double discount, double point, int delivery_type, int stock ) {
if(attr.length != 8) {
System.out.println("누락된 문자열 값이 있거나, 문자열 수가 많습니다.");
System.out.println("{이미지, 제조사, 제품명, 부제목, 판매자, 판매단위, 용량, 안내사항}");
}
else {
prod_img = attr[0];
prod_manugaturer = attr[1];
prod_title = attr[2];
prod_sub_title = attr[3];
prod_seller = attr[4];
prod_unit = attr[5];
prod_quantity = attr[6];
prod_notice = attr[7];
}
setProductPrice(price);
setProdcuctDiscountRate(discount);
setProdcuctPointRate(point);
setProdcuctStock(stock);
setProdcuctDeliveryType(delivery_type);
}
void printProductInfo(boolean login) {
System.out.println("제품 이미지" + prod_img + prod_title);
System.out.println(delivery[prod_delivery_type]);
System.out.print("[" + prod_manugaturer + "]");
System.out.println(prod_sub_title);
if (login) {
System.out.println("할인율 : " + (int)prod_discount_rate + "%");
System.out.println("할인 적용 가 : " + getDisountedPrice(login) + "원");
System.out.println("적립율 : " + (int)(prod_point_rate*100) + "%");
System.out.println("적립 포인트 : " + getSavingPoint(login) + "점");
System.out.println("제품 원가 : " + prod_price + "원");
}
else {
System.out.println("제품 가격 : " + prod_price + "원");
}
System.out.println("판매자 : " + prod_seller);
System.out.println("판매단위 : " + prod_unit);
System.out.println("제품용량 : " + prod_quantity);
System.out.println("제품안내사항 : " + prod_notice);
}
int getDisountedPrice (boolean login) {
if(login) {
return (int)(prod_price*(1-prod_discount_rate));
}
return prod_price;
}
int getSavingPoint(boolean login) {
if(login) {
return (int)(getDisountedPrice(login)*prod_point_rate);
}
return 0;
}
boolean isOrderAvailable () {
return prod_stock > 0;
}
boolean productOrder(int stock) {
if (prod_stock - stock >= 0) {
System.out.println("제품을 " + stock + "개 주문했습니다.");
prod_stock -= stock;
return true;
}
// else {
System.out.println("제품의 재고가 부족합니다. (재고수량 : " + prod_stock + ")");
return false;
// }
}
void setProductPrice(int price) {
if (price < 0) {
prod_price = 0;
}
else {
prod_price = price;
}
}
void setProdcuctDiscountRate(double discount_rate) {
if (discount_rate < 0) {
prod_discount_rate = 0;
}
else if (discount_rate >= 1) {
prod_discount_rate = 1;
}
else {
prod_discount_rate = discount_rate;
}
}
void setProdcuctDiscountRate(int discount_rate) {
if (discount_rate < 0) {
prod_discount_rate = 0;
}
else if (discount_rate >= 100) {
prod_discount_rate = 1;
}
else {
prod_discount_rate = discount_rate/100.0;
}
}
void setProdcuctPointRate(double point_rate) { // method overloading 변수 값에 따라 유연한 코딩을 할 수 있도록 설정.
if (point_rate < 0) {
prod_discount_rate = 0;
}
else if (point_rate >=1 ) {
prod_point_rate = 1;
}
else {
prod_point_rate = point_rate;
}
}
void setProdcuctPointRate(int point_rate) {
if (point_rate < 0) {
prod_discount_rate = 0;
}
else if (point_rate >= 100 ) {
prod_point_rate = 1;
}
else {
prod_point_rate = point_rate/100.0;
}
}
void setProdcuctDeliveryType(int delivery_type) {
if (delivery_type >=0 && delivery_type < delivery.length) {
prod_delivery_type = delivery_type;
}
else {
prod_delivery_type = 0;
}
}
void setProdcuctStock (int stock) {
if (stock <0) {
stock = 0;
}
else {
prod_stock = stock;
}
}
}
위에서 만든 메서드클래스 이용한 메인클래스
public class KurlyMain {
public static void main(String[] args) {
String[] attrs = {
"product.jpg", "루메나", "루메나 FAN STAND 3X 무선 써큘레이터 3종", "감성 캠핑의 완성",
"컬리", "1개", "-", "-" };
KurlyProduct prod1 = new KurlyProduct(attrs, 39900, 0.12, 0.05, 2, 10);
// setter method ( 속성이 private인 멤버변수의 값을 설정하는 용도 )
prod1.setProductPrice(39900);
prod1.setProdcuctDiscountRate(0.12); // method overloading을 통해 정수기반, 소수기반 할인율 둘다 적용가능.
prod1.setProdcuctPointRate(0.05);
prod1.setProdcuctDeliveryType(2);
prod1.setProdcuctStock(10);
// prod1.prod_price = -50000; // private 값이기 때문에 불가
boolean login = true;
prod1.printProductInfo(true);
int order = 8;
if (prod1.productOrder(order)) {
// getter method (값을 내어보내는 역학을 하는 메서드-접근권한이 private인 정보에 접근하기 위하여 필요)
System.out.println("총 구매금액 : " + prod1.getDisountedPrice(login)*8 + "원");
}
if(prod1.productOrder(order)) {
System.out.println("총 구매금액 : " + prod1.getDisountedPrice(login)*5 + "원");
}
if(prod1.productOrder(order)) {
System.out.println("총 구매금액 : " + prod1.getDisountedPrice(login)*2 + "원");
}
}
}