본문 바로가기

Develop/Java

클래스와 데이터 (+ 배열,매서드)

-클래스 : 설계도 

-객체 / 인스터스 : 설계도인 클래스를 사용해서 실제 메모리에 만들어진 실체 

                                인스턴스가 좀 더 클래스 관계지향적 단어 

 

변수 선언 > 객체 생성 > 참조값 보관 > 객체 사용

public class ProductOrdermain {
    public static void main(String[] args) {

        ProductOrder [] orders = new ProductOrder[3]; //배열 부분에서 코드 짜는 방법 이해하기

        ProductOrder order1 = new ProductOrder(); //변수 선언 & 객체 생성 & 참조값 보관
        order1.productName="두부"; // dot을 사용해서 객체에 접근
        order1.price=2000;
        order1.quantity=2;
        orders[0]=order1;

        ProductOrder order2 = new ProductOrder();
        order2.productName="김치";
        order2.price=5000;
        order2.quantity=1;
        orders[1]=order2;

        ProductOrder order3 = new ProductOrder();
        order3.productName="콜라";
        order3.price=1500;
        order3.quantity=2;
        orders[2]=order3;

        int sum = 0; // sum의 초기화를 어디서 해야할지 항상 고민하는 듯. 위치를 기억하자
        for (ProductOrder order : orders) { //향상된 for문, iter
            System.out.println("상품명: "+order.productName+", 가격: "+order.price+", 수량: "+order.quantity);
            sum += order.price * order.quantity;
        }
        System.out.println("총 결제 금액: "+sum); //여기에 적어야 중복 출력되지 않음
    }
}

 

배열을 이용하여 출력을 더 용이하게 할수 있음.

위에 ProductOrder의 객체를 이용하여 인스턴스들을 만들었는데

저 부분이 중복되는 걸 보아 매서드를 이용할 수 있을 것 같다.

저 부분도 더 간단하게 되는 걸까?

 


 

매서드를 이용하여 다시 코딩 > 잘 돌아감 

public class Order {
    public static void main(String[] args) {

        ProductOrder order1 = new ProductOrder(); //매서드를 이용하여 간편하게 입력할 수 있음
        initProductOrder(order1,"두부",2000,2);

        ProductOrder order2 = new ProductOrder();
        initProductOrder(order2,"김치",5000,1);

        ProductOrder order3 = new ProductOrder();
        initProductOrder(order3,"콜라",1500,2);

        printOrder(order1); //밑에서 참조값을 가져올 수 있음
        printOrder(order2);
        printOrder(order3);

        int sum = 0;  //위에서 고민했던 부분 다시 복습해보기. for문을 나와도 왜 sum이 
        for (int i=1;i<=3;i++){ //잘 작동되는지 모르겠지만 이런 형태가 맞는 것 같다. 
        sum += order1.price * order1.quantity;}
        System.out.println("총 결제 금액: "+sum);

    }
static void initProductOrder(ProductOrder order, String name, int price, int quantity){

        order.productName = name;      //매서드를 이용해서 구현
        order.price = price;
        order.quantity = quantity;

}
    static void printOrder(ProductOrder order){ //항상 "어떻게" 짜야하는 지를 기억하자 
        System.out.println("상품명: "+order.productName+", 가격: "+order.price+", 수량: "+order.quantity);

    }
}

 

 

고민했던 부분(매서드를 어떻게 사용해야할지)을 바로 적용해보니 프로세스가 좀 더 이해되는 것 같다.

하지만 여전히 직접 치면서 코딩 연습하는 것에 대한 필요성을 느끼는 중.

코드를 직접 짜보고 궁금한 부분을 찾아볼수록 이해가 안가던 부분도 갑자기 이해가 된다!


 

하지만 여전히 

       ProductOrder order1 = new ProductOrder(); 
        initProductOrder(order1,"두부",2000,2);

        ProductOrder order2 = new ProductOrder();
        initProductOrder(order2,"김치",5000,1);

        ProductOrder order3 = new ProductOrder();
        initProductOrder(order3,"콜라",1500,2);

 

이 부분이 반복되어서 이 부분도 줄일 수 없을지 고민.

이 부분도 매서드에 좀 더 추가해서 줄여보자 .

 

public class Order02 {
    public static void main(String[] args) {

        ProductOrder order1 = createOrder ("두부",2000,2);
        ProductOrder order2 = createOrder("김치",5000,1);
        ProductOrder order3 = createOrder("콜라",1500,2);

        printOrder(order1);
        printOrder(order2);
        printOrder(order3);

        int sum = 0;
        for (int i=1;i<=3;i++){
        sum += order1.price * order1.quantity;}
        System.out.println("총 결제 금액: "+sum);
    }

    static ProductOrder createOrder(String name, int price, int quantity){
        ProductOrder order = new ProductOrder();
        order.productName = name;
        order.price = price;
        order.quantity = quantity;
        return order;
    }
    static void printOrder(ProductOrder order){
        System.out.println("상품명: "+order.productName+", 가격: "+order.price+", 수량: "+order.quantity);
    }

 

ProductOrder order1 = new ProductOrder(); 

 

이 부분 자체를 매서드에 넣었다. static ProductOrder createOrder 이 부분을 짜는게 아직 많이 헷갈린다

책을 보면서 어디서 저것들이 참조되는 것인지를 정확하게 이해해야 할 것 같다. 

'Develop > Java' 카테고리의 다른 글

StringBuilder / StringBuffer / String 비교  (1) 2024.08.23
\n이 남아 있는 경우  (1) 2024.01.26
public void / int  (0) 2023.12.15
배열  (0) 2023.12.11
switch문  (0) 2023.12.11