Java 공부 21일차(접근 제어자란?)3편 문제풀이

임선구·2025년 1월 24일

몸 비틀며 Java

목록 보기
22/58

오늘의 잔디


오늘의 공부

항상 문제 풀 때마다 느끼는거지만 변수명 짓기가 진짜 어렵다 읽자마자 내가 이해할 수 있게끔 변수명 짓는게 어렵고 메서드를 불러올 때 바로바로 그 메서드 명이 퍼뜩퍼뜩 떠오르지 않아서 애먹는다.
우리가 한국인이라 그런가
영어가 모국어였으면 확실히 배는 쉬웠을 듯.
하지만 그럼에도 불구하고 오늘도 해냈다.
점점 문제가 어려워지고 코드량도 많아지지만
이해가 다 가서 재미있따.


문제와 풀이

문제 - 최대 카운터와 캡슐화

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 int count = 0;
 private int max;
 public MaxCounter(int max) {
 this.max = max;
 }
 public void increment() {
 if (count >= max) {
 System.out.println("최대값을 초과할 수 없습니다.");
 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];
 private int itemCount;
 public void addItem(Item item) {
 if (itemCount >= items.length) {
 System.out.println("장바구니가 가득 찼습니다.");
 return;
 }
 items[itemCount] = item;
 itemCount++;
 }
 public void displayItems() {
 System.out.println("장바구니 상품 출력");
 for (int i = 0; i < itemCount; i++) {
 Item item = items[i];
 System.out.println("상품명:" + item.getName() + ", 합계:" +
item.getTotalPrice());
 }
 System.out.println("전체 가격 합:" + calculateTotalPrice());
 }
 private int calculateTotalPrice() {
 int totalPrice = 0;
 for (int i = 0; i < itemCount; i++) {
 Item item = items[i];
 totalPrice += item.getTotalPrice();
 }
 return totalPrice;
 }
}
  • calculateTotalPrice() : 이 메서드 내부에서만 사용되므로 private 접근 제어자를 사용한다.
profile
끝까지 가면 내가 다 이겨

0개의 댓글