인프런 커뮤니티 질문&답변

jjlee021899님의 프로필 이미지
jjlee021899

작성한 질문수

김영한의 실전 자바 - 기본편

클래스 따로 만들어 선언하는 이유

해결된 질문

작성

·

46

0

package ref.ex;

public class ProductOrder {
    String productName;
    int price;
    int quantity;
}
package ref.ex;

public class ProductOrderMain2 {

    static ProductOrder createOrder(String productName, int price, int quantity) {
        ProductOrder order = new ProductOrder();
        order.productName = productName;
        order.price = price;
        order.quantity = quantity;
        return order;
    }

    static void printOrders(ProductOrder[] orders) {
        for (ProductOrder order : orders) {
            System.out.println("상품명: " + order.productName + ", 가격: " + order.price + ", 수량: " + order.quantity);
        }
    }

    static int getTotalAmount(ProductOrder[] orders) {
        int amount = 0;
        for (ProductOrder order : orders) {
            amount += order.price * order.quantity;
        }
        return amount;
    }

    public static void main(String[] args) {
        ProductOrder[] orders = new ProductOrder[3];
        orders[0] =  createOrder("두부", 2000, 2);
        orders[1] =  createOrder("김치", 5000, 1);
        orders[2] =  createOrder("콜라", 1500, 2);

        printOrders(orders);
        System.out.println("총 결제 금액: " + getTotalAmount(orders));
    }
}

섹션3, 기본형과 참조형 문제와 풀이

여기에서 productName, price, quantity를 다른 클래스에 따로 선언하는 이유가 인스턴스를 생성하기 위함인가요? 만약 맞다면, 클래스 ProductOrderMain2의 멤버변수로 선언하고 만들면 비효율적인가요? 아니면 불가능한가요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

jjlee021899님께서 질문하신 부분에 대한 답변을 드리겠습니다. 클래스의 사용과 관련된 유사한 질문이 있어 그에 대한 답변을 통해 이해를 돕고자 합니다.

왜 클래스를 따로 선언하는가?

  1. 재사용성: ProductOrder 클래스를 따로 선언함으로써 코드의 재사용성을 높일 수 있습니다. 다른 곳에서도 동일한 상품 주문 관련 데이터를 사용할 수 있게 됩니다. 만약 데이터 구조를 바꾸거나 확장할 일이 생기면, ProductOrder 클래스만 수정하면 되므로 관리가 쉽습니다.

  2. 캡슐화: 데이터와 메서드를 하나의 클래스에 묶어 줌으로써, 외부에 불필요한 노출을 막고 유지보수성을 향상 시킬 수 있습니다.

  3. 이해도: 코드의 이해도를 높여 줍니다. 메인 클래스에 모든 정보를 담을 경우, 코드가 복잡해지고 이해하기 어려워질 수 있습니다. 클래스를 분리하면 각 클래스가 맡은 역할과 책임이 명확해집니다.

클래스 내부 멤버 변수로 선언하는가?

클래스 내부의 멤버 변수로 productName, price, quantity를 선언할 수도 있습니다. 하지만 이는 각 주문이 공통적으로 사용할 데이터를 멤버 변수로 두는 반면, 개별 인스턴스에서 다르게 사용할 수 없는 구조가 됩니다. 각 주문(상품)은 별개의 데이터를 가져야 하므로 객체(인스턴스)의 멤버로 존재하는 것이 맞습니다.

아래 링크에서 유사한 문제와 답변을 찾아 보실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

jjlee021899님의 프로필 이미지
jjlee021899

작성한 질문수

질문하기