JAVA

[Java] 캡슐화

songsua 2024. 10. 27. 00:29

캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서 접근을 제한하는 것을 말한다.

캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.

 

1. 데이터를 숨겨라

객체에는 속성과 기능이 있다. 캡슐화에서 가징 필수로 숨겨야 하는 것은 데이터이다.

외부에서 데이터를 변경하게되면 모든 안전망을 빠져나간다. 그러면 캡슐화가 깨진다. 

 

 

2. 기능을 숨겨라

객체의 기능 중에 외부에서 사용하지 않고 내부에서만 사용하는 기능이 있다. 이런 기능도 다 감추는 것이 좋다.

 

정리하면 데이터는 모두 숨기고, 기능은 꼭 필요한 기능만 노툴하는 것이 좋은 캡슐화이다.

 

-private 와 public 을 적절하게 사용하여 외부에 유출되는 사항과 아닌 사항을 구별한다.

 

문제와 풀이

1. 최대 카운터와 캡슐화

  • MaxCounter` 클래스를 만드세요.
    이 클래스는 최대값을 지정하고 최대값 까지만 값이 증가하는 기능을 제공합니다.
    `int count` : 내부에서 사용하는 숫자 입니다. 초기값은 0입니다.
    'int max' : 최대값 입니다. 생성자를 통해 입력합니다.
    `increment()` 숫자를 하나 증가합니다.
    `getCount()` 지금까지 증가한 값을 반환합니다.
  • 요구사항**
    **
    접근 제어자를 사용해서 데이터를 캡슐화 하세요.**

    **해당 클래스는 다른 패키지에서도 사용할 수 있어야 합니다.**

     

package access.ex;

public class MaxCounter {
    //클래스는 최대값을 지정하고 최대값까지만 값이 증가하는 기능을 제공합니다.
    //속성을 다 숨긴다.
    private int counter = 0;
    int count;
    private int max;

    //생성자는 public 을 사용한다. 이러면 해당 패키지는 다른 클래스에서도 사용이 가능하다.
    public MaxCounter(int max) {
        this.max = max;
    }

    public void increment() {
        if (counter >= max) {
            System.out.println("최대값을 초과할 수 없습니다.");
            return;
        }
        counter++;
    }
    public int getCount() {
        return count;
    }
}
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);
        }
}

 

2. 쇼핑 카트
ShoppingCartMain` 코드가 작동하도록 `Item` , `ShoppingCart` 클래스를 완성해라.

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

3. 장바구니에는 상품을 최대 10개만 담을 수 있다.
10개 초과 등록시: "장바구니가 가득 찼습니다." 출력

 

package access.ex;

public class Item {
    String name;
    int price;
    int amount;

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

    }

    public  String getName() {
        return name;
        //장바구니 상품 출력
        //각각 상품별 합계가 필요하다.

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

 

package access.ex;

public class ShoppingCart {
    //쇼핑카드안에 배열을 통해 items 을 10개 까지만 가지게 한다.
    private Item[] items = new Item[10];
    private int itemCount;

    public void addItem(Item item) {
       if (itemCount >= items.length) {
           System.out.println("장바구니가 가득 찼습니다.");
           return;
       }
        //처음에 itemcount = 0 이다.
        //++ 함으로써 1개씩 증가시킨다.
        items[itemCount] = item;
        itemCount++;
    }
    public  void displayItem() {
        System.out.println("장바구니 상품 출력");
        //item 배열만큼 돌아야한다.
        for (int i = 0; i < itemCount; i++) {
            Item s = items[i];
            System.out.println(s.getName() + "합계: " + s.getTotalPrice());

        }

        }
}

 

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("상추", 5000, 6);


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

'JAVA' 카테고리의 다른 글

[Java] Static  (0) 2024.10.27
[Java] 메모리구조  (1) 2024.10.27
[Java] 생성자  (0) 2024.10.23
[Java] 생성자  (0) 2024.10.20
[Java] 객체 지향 프로그래밍  (1) 2024.10.20