캡슐화
객체 지향 프로그래밍의 중요한 개념 중 하나!!!
데이터(변수)와 데이터를 처리하는 메서드를 클래스로 묶어 독립적으로 동작하지 않도록 하거나 불필요한 정보를 노출시키지 않는 개념 (외부에서의 접근 제한)
* 코드의 유지보수성을 향상
* 객체의 내부 구현을 외부로부터 숨김 (정보 은닉)
* 객체의 내부 상태를 제어하고, 잘못된 접근으로부터 보호함
아래의 코드는 캡슐화를 적용한 예시 이다
package javabasic.access.b;
public class BankAccount {
private int balance;
// 금액 검증
private boolean isAmountValid(int amount) {
// 금액이 0보다 커야 함
return amount > 0; // true 반환
}
// 입금
public void deposit(int amount) {
if (isAmountValid(amount)) {
balance += amount;
} else {
System.out.println("유효하지 않은 금액");
}
}
// 출금
public void withdraw(int amount) {
if (isAmountValid(amount) && (balance - amount) >= 0) {
balance -= amount;
} else {
System.out.println("유효하지 않은 금액이거나, 잔액 부족");
}
}
// 잔액
public int getBalance() {
return balance;
}
}
- private
- balance : 데이터 필드는 외부에 직접 노출 X, BankAccount가 제공하는 메서드 통해서만 접근 가능
- isAmountValid() : 입력 금액을 검증하는 기능은 내부에서만 필요한 기능
- public
- deposit() : 입금
- withdraw() : 출금
- getBalance() : 잔고
BankAccount를 사용하는 입장에서는 위의 메서드 3가지만 알면 된다!
나머지 복잡한 내용은 모두 BankAccount 내부에 숨어있다.
package javabasic.access.b;
public class BankAmountMain {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.deposit(20000);
account.withdraw(10000);
int balance = account.getBalance();
System.out.println("현재 잔액 : " + balance);
}
}
캡슐화를 안전하게 완성할 수 있게 해주는 장치가 바로 접근제어자 이다!
이전 블로그를 참고!!