1. 캡슐화
- 객체 지향 프로그래밍의 중요한 개념 중 하나
- 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것
- 데이터의 직접적인 변경 방지 / 제한 가능
📌 좋은 캡슐화
: 데이터는 모두 숨기고, 꼭 필요한 기능만 노출하는 것
1-1. 캡슐화와 데이터
- 객체 ⇒ 필수로 데이터를 숨겨라!
- 데이터가 외부에서 접근 가능하면 클래스 내부의 (데이터 변경) 기능을 무시한 채 데이터를 직접 변경 가능 ⇒ 캡슐화가 깨짐!
“객체의 데이터는 객체가 제공하는 기능(메서드) 을 통해서만 접근해야 한다.”
⇒ 데이터는 가급적 모두 private 으로!
1-2. 캡슐화와 기능
- 가급적 필요한 기능만 노출
- 나머지 기능은 최대한 많이 숨겨라!
1-3. 캡슐화 좋은 예시
- 은행 계좌 클래스 예시
public class BankAccount {
private int balance;
public BankAccount() {
balance = 0;
}
// public 메서드: deposit
public void deposit(int amount) {
if (isAmountValid(amount)) {
balance += amount;
} else {
System.out.println("유효하지 않은 금액입니다."); }
}
}
// public 메서드: withdraw
public void withdraw(int amount) {
if (isAmountValid(amount) && balance - amount >= 0) {
balance -= amount;
} else {
System.out.println("유효하지 않은 금액이거나 잔액이 부족합니다.");
}
}
// public 메서드: getBalance
public int getBalance() {
return balance;
}
// private 메서드: isAmountValid
private boolean isAmountValid(int amount) {
// 금액이 0보다 커야함
return amount > 0;
}
}
- isAmountValid() 메서드
- public으로 열어두게 되면 BankAccount 인스턴스 사용 시 “직접 호출해서 검증해야 되는가?” 라는 의문 발생 가능
- 즉, 클래스 내부에서만 사용하는 메서드 이므로 private 으로 지정
- balance 필드
- public으로 열어두게 되면 직접 접근하여 잔액 변경 가능 ⇒ 모든 검증과 캡슐화가 깨지게 됨!
- 데이터는 노출하지 않고 클래스가 제공하는 메서드로만 접근 가능하게 private으로 설정
- deposit(), withdraw(), getBalance()
- BankAccount 클래스를 사용하는 입장에서는 이 3가지 기능만 알면 되므로 public 으로 열어둠
'Java' 카테고리의 다른 글
[Java] 객체 지향 프로그래밍 - 다형성 (Polymorphism) (0) | 2024.07.09 |
---|---|
[Java] 객체 지향 프로그래밍 - 상속 (Inheritance) (0) | 2024.07.08 |
[Java] 접근 제어자 (Access Modifier) (0) | 2024.07.08 |
[Java] 생성자 (0) | 2024.07.08 |
[Java] 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) (0) | 2024.07.08 |