• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

[6. 접근제어자][문제와풀이2] 쇼핑카트 질문 (p.19)

24.02.15 23:50 작성 조회수 342

2

안녕하세요 저는 선생님께서 작성해주신 코드와 다르게 하기 처럼작성하였습니다.

자체적으로 총 합계를 구해서 displayitems에 같이 도출했는데 하기 처럼 작성해도 무관할까요?

값을 동일하게 도출됩니다.

public class ShoppingCart {
//배열
    private Item[] items = new Item[10];
    private int itemCount;


    public void addItem(Item item) { //item에 데이터 넣어야 함.. 순환할 필욘 없는 듯
        if (itemCount >= 10) {
            System.out.println("장바구니가 가득 찼습니다.");
            return;
        }
        items[itemCount] = item;
        itemCount++;
    }

    public void displayItems() {
        System.out.println("장바구니 상품 출력");
        int sum = 0;
        for (int i = 0; i < itemCount ; i++) {
            System.out.println("상품명 : " + items[i].itemName() + ", 합계 : " + items[i].itemTotalPrice());
            sum += items[i].itemTotalPrice();
        }
        System.out.println("전체 가격 합 : " + sum);
    }
}

답변 2

·

답변을 작성해보세요.

2

David님의 프로필

David

2024.02.15

안녕하세요. 개화동과자사장님, 공식 서포터즈 David입니다.

작성하신 것도 괜찮습니다.

다만, 강의 내에서 총 합계 로직을 별도의 메서드로 분리한 것은 displayItems 메서드는 무언가를 출력는 책임만 가지고 있도록 하기 위함입니다.

출력은 출력 담당 메서드, 계산은 계산 담당 메서드 각각을 분리했다고 보시면 됩니다.

감사합니다.

밤 늦게까지 고생 많으십니다!

남은 하루 마무리 잘하시고 내일도 좋은 하루 보내세요 감사합니다!!

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.15

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

개화동과자사장님께서 작성하신 ShoppingCart 클래스의 displayItems 메서드 로직에 대한 질문이시군요. 개화동과자사장님의 코드는 items 배열에 있는 모든 상품에 대해 상품명과 개별 합계를 출력하고, 전체 합계를 구하는 로직을 포함하고 있습니다.

저희 기존 답변 데이터베이스를 살펴본 결과, 해당 질문과 유사한 상황에 대해 논의된 내용이 있는 것을 발견했습니다. y2gcoder님의 답변에서 언급된 것처럼 기능적으로는 문제가 없으며, 이런 형태의 코드에서 가독성을 높인다는 점에서 김영한 선생님의 코드가 다를 수 있다는 점을 설명하고 있습니다.

해당 링크에서 비슷한 상황에 대한 논의를 찾아보시면 도움이 될 것 같습니다:
- 김영한의 실전자바-기본편 섹션6 연습문제 두번째

개화동과자사장님의 코드는 items 배열을 itemCount 만큼 반복하여 개별적으로 합계를 출력한 후 전체의 합을 출력하는 코드이므로 기본적인 기능이나 로직에는 문제가 없습니다. 다만 현업에서는 좀 더 유지보수하기 좋은 코드, 타 개발자가 봤을 때 이해하기 쉬운 코드를 작성하는 것을 중요하게 여기기 때문에 가독성과 코드의 재사용성을 고려할 필요는 있습니다.

결론적으로, 개화동과자사장님의 로직이 정확한 결과를 도출한다면 문제될 것은 없지만, 발전적인 코드 작성을 위해서는 다른 예제나 좀 더 세련된 패턴을 공부해보실 것을 추천드립니다.

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