Java 20221031

신래은·2022년 12월 15일

JAVA

목록 보기
10/22

DAY 11

private <-> public
For example,
구매자가 입력하면 안되는 값을 public으로 지정하면 아무나 접근해서 값을 수정할 수 있음.
private으로 지정하면 그 값을 임의로 지정할 수 없음.
직접적으로 sysout을 이용하여 조회도 불가능.

Code

MethodEx-Account

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 + "원");
}

MainEx-Account

위에 작성된 메서드를 메인에서 이용

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

MethodEx-Kurly

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

MainEX-Kurly

위에서 만든 메서드클래스 이용한 메인클래스

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 + "원");
        }
    }
}

0개의 댓글