Java
캡슐화
ji_su_04
2024. 7. 30. 18:46
캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다.
캡슐화를 통해서 직접적인 변경을 방지하거나 제한할 수 있다.
- 데이터를 숨겨라
캡슐화에서 가장 필수로 숨겨야 하는 것은 속성(데이터)이다.
객체 내부의 데이터를 외부에서 함부로 접근하게 두면, 클래스 안의 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있다.
객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다. - 기능을 숨겨라
객체의 기능 중에서 외부에서 사용하지 않고, 내부에서만 사용하는 기능들이있다.
이런 기능도 모두 감추는 것이 좋다.
꼭 필요한 기능한 외부에 노출하고 나머지 기능은 내부로 숨기는 것이 좋다.
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를 사용하는 개발자 입장에서 해당 기능을 사용하는 복잡도도 낮출 수 있다.
반응형