Java

캡슐화

ji_su_04 2024. 7. 30. 18:46

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

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

 

  1. 데이터를 숨겨라
    캡슐화에서 가장 필수로 숨겨야 하는 것은 속성(데이터)이다.
    객체 내부의 데이터를 외부에서 함부로 접근하게 두면, 클래스 안의 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다.
    객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.
  2. 기능을 숨겨라
    객체의 기능 중에서 외부에서 사용하지 않고, 내부에서만 사용하는 기능들이있다.
    이런 기능도 모두 감추는 것이 좋다.
    꼭 필요한 기능한 외부에 노출하고 나머지 기능은 내부로 숨기는 것이 좋다.
package access;

public class BackAccount {

    private int balance;


    public BackAccount() {
        balance = 0;
    }

    // public 메서드 : deposit

    public void deposit(int amount) {
        if (isAmountValid(amount)) {
            balance += amount;
        }else {
            System.out.println("You don't have enough money");
        }
    }

    //검증은 내부에서만
    private boolean isAmountValid(int amount) {
        return amount > 0;
    }

    // 출금
    public void withdraw(int amount) {
        if (isAmountValid(amount) && balance - amount >= 0) {
            balance -= amount;
        }else {
            System.out.println("유효하지 않은 금액이거나 잔액 없음");
        }
    }

    public int getBalance() {
        return balance;
    }
}
package access;

public class BankAccountMain {
    public static void main(String[] args) {
        BackAccount backAccount = new BackAccount();
        backAccount.deposit(100);
        backAccount.withdraw(50);
        System.out.println("Balance: " + backAccount.getBalance());
    }
}

 

위 예제는 isAmountValid를 private로 내부에서만 사용할 수 있게 했다.

만약 isAmountValid를 public으로 사용한다면 검증 값을 수정하여 무한히 출금을 할 수 있게 될 것이다.

접근제어자와 캡슐화를 통해 데이터를 안전하게 보호하는 것은 물론, BankAccount를 사용하는 개발자 입장에서 해당 기능을 사용하는 복잡도도 낮출 수 있다.

반응형