캡슐화
캡슐화는 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 데이터를 직접 변경하는 것을 방지하거나 제한할 수 있다.
캡슐화는 속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 내부로 숨기는 것이다. 여기서 캡슐화를 안전하게 완성할 수 있게 해주는 장치가 접근제어자 이다.
어떤 것을 숨기고 어떤 것을 노출해아 할까?
1. 데이터
객체에는 속성(데이터)과 기능(메서드)가 있다. 캡슐화에서 필수로 숨겨야 하는 것은 속성(데이터)이다. 객체의 내부를 데이터 외부에서 접근하게 되면 외부에서 데이터를 변경할 수 있게 되므로 캡슐화가 깨진다.
객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다.
2. 기능
객체의 기능 중에서 외부에서 사용하지 않고 내부에서만 사용하는 기능들이 있다. 이런 기능도 캡슐화하는 것이 좋다.
예를 들어, 우리가 자동차를 운전하기 위해서 자동차가 제공하는 복잡한 엔진 조절 기능, 배기 기능 등을 알 필요는 없다. 우리는 엑셀과 핸들 정도의 기능만 알면된다.
따라서 꼭 필요한 기능만 외부에 노출하고 나머지는 내부로 숨기는 것이 좋다.
예제
package access;
public class BankAccount {
private int balance; //잔액
public BankAccount() {
this.balance = 0;
}
// public 메서드 : deposit
public void deposit(int amount) {
if (isAmountValid(amount)){
balance += amount;
} else {
System.out.println("유효하지 않은 금액입니다. ");
}
}
public void widthdraw(int amount) {
if(isAmountValid(amount) && balance -amount > 0) {
balance -= amount;
} else {
System.out.println("유효하지 않은 금액이거나 잔액이 부족합니다. ");
}
}
public int getBalance() {
return balance;
}
private boolean isAmountValid(int amount) {
// 금액이 0보다 커야함
return amount > 0;
}
}
package access;
public class BankAccountMain {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.deposit(100000);
account.widthdraw(3000);
System.out.println("balance: " + account.getBalance());
}
}
=>
private balance : 데이터 필드는 외부에 직접 노출하지 않는다. BankAccount가 제공하는 메서드를 통해서만 접근할 수 있다.
private isAmountValid() : 입력 금액을 검증하는 기능으로 내부에서만 필요한 기능이다.
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 기본] 스택과 큐 자료구조 (0) | 2024.07.10 |
---|---|
[Java 기본] 자바 메모리 구조 (0) | 2024.07.10 |
[Java 기본] 접근 제어자 사용 - 클래스 레벨 (0) | 2024.07.08 |
[Java 기본] 접근 제어자 사용 - 필드, 메서드 (0) | 2024.07.08 |
[Java 기본] 접근 제어자 종류 (0) | 2024.07.08 |