[Java] Section6 - 문제와 풀이

코드 속의 "진돌"·2024년 2월 13일
0
post-thumbnail

✅ 최대 카운터와 캡슐화


🔔 문제 설명

MaxCounter 클래스를 만드세요.
이 클래스는 최대값을 지정하고 최대값 까지만 값이 증가하는 기능을 제공합니다.

  • int count : 내부에서 사용하는 숫자입니다. 초기값은 0입니다.
  • int max : 최대값입니다. 생성자를 통해 입력합니다.
  • increment() : 숫자를 하나 증가합니다.
  • getCount() : 지금까지 증가한 값을 반환합니다.



🔔 요구 사항

  • 접근 제어자를 사용해서 데이터를 캡슐화 하세요.
  • 해당 클래스는 다른 패키지에서도 사용할 수 있어야 합니다.



✏️ 예시 코드

package access.ex;

public class CounterMain {

  public static void main(String[] args) {
    MaxCounter counter = new MaxCounter(3);

    counter.increment();
    counter.increment();
    counter.increment();
    counter.increment();

    int count = counter.getCount();
    System.out.println(count);
  }
}



🖥️ 실행 결과

최대값을 초과할 수 없습니다.
3



✏️ 정답

package access.ex;

public class MaxCounter {
  // private : 해당 클래스에서만 접근 가능
  private int count = 0;
  private int max;

  // public : 다른 패키지에서도 접근 가능
  public MaxCounter(int max) {
    this.max = max;
  }

  public void increment() {
    // 검증 로직
    if (count >= max) {
      System.out.println("최댓값을 초과할 수 없습니다.");
      return;  // return을 통해 검증과 실행을 나눈다.
    }

    // 실행 로직
    count++;
  }

  public int getCount() {
    return count;
  }
}




✅ 쇼핑 카트


🔔 문제 설명

ShoppingCartMain 코드가 작동하도록 Item, ShoppingCart 클래스를 완성하세요.



🔔 요구 사항

  • 접근 제어자를 사용해서 데이터를 캡슐화 하세요.
  • 해당 클래스는 다른 패키지에서도 사용할 수 있어야 합니다.
  • 장바구니에는 상품을 최대 10개만 담을 수 있습니다.
    • 10개 초과 등록 시 : “장바구니가 가득 찼습니다.” 출력



✏️ 예시 코드

package access.ex;

public class ShoppingCartMain {

  public static void main(String[] args) {
    ShoppingCart cart = new ShoppingCart();

    Item item1 = new Item("마늘", 2000, 2);
    Item item2 = new Item("상추", 3000, 4);

    cart.addItem(item1);
    cart.addItem(item2);

    cart.displayItems();
  }
}



🖥️ 실행 결과

장바구니 상품 출력
상품명: 마늘, 합계: 4000
상품명: 상추, 합계: 12000
전체 가격 합: 16000



✏️ Item

package access.ex;

public class Item {
	private String name;
	private int price;
	private int quantity;

	// TODO 나머지 코드를 완성하세요.
}



✏️ ShoppingCart

package access.ex;

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

	// TODO 나머지 코드를 완성하세요.
}



✏️ 정답

package access.ex;

public class Item {
  private String name;
  private int price;
  private int quantity;

  public Item(String name, int price, int quantity) {
    this.name = name;
    this.price = price;
    this.quantity = quantity;
  }

  public String getName() {
    return name;
  }

  public int getTotalPrice() {
    return price * quantity;
  }
}

각각의 Item의 가격과 수량을 곱하면 각 상품별 합계를 구할 수 있다. pricequantity를 외부에 반환한 다음에 외부에서 곱해서 상품별 합계를 구해도 되지만, getTotalPrice() 메서드를 제공하면 외부에서는 단순히 이 메서드를 호출하면 된다. 이 메서드의 핵심은 자신이 가진 데이터를 사용한다는 점이다.


package access.ex;

public class ShoppingCart {
  private Item[] items = new Item[10];  // Item을 담을 수 있는 배열
  private int itemCount;

  // addItem : 상품 등록
  public void addItem(Item item) {
    // 검증 로직
    if (itemCount >= items.length) {
      System.out.println("장바구니가 가득 찼습니다.");
      return;
    }

    // 실행 로직
    items[itemCount] = item;
    itemCount++;
  }

  // displayItems : 장바구니 상품 출력
  public void displayItems() {
    System.out.println("장바구니 상품 출력");

    for (int i = 0; i < itemCount; i++) {
      Item item = items[i];  // // items에 담겨있는 item 꺼내기
      System.out.println("상품명: " + item.getName() + ", 합계: " + item.getTotalPrice());
    }

    System.out.println("전체 가격 합: " + calculateTotalPrice());
  }

  // calculateTotalPrice : 장바구니 전체 가격
  // private : ShoppingCart 클래스에서만 사용하므로 private으로 접근 제한
  private int calculateTotalPrice() {
    int totalPrice = 0;

    for (int i = 0; i < itemCount; i++) {
      Item item = items[i];  // items에 담겨있는 item 꺼내기
      totalPrice += item.getTotalPrice();
    }

    return totalPrice;
  }
}
  • calculateTotalPrice() : 이 메서드는 내부에서만 사용되므로 private 접근 제어자를 사용한다.
profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글