1. 캡슐화
캡슐화(Encapsulation)란, 객체의 데이터(속성)를 외부에서 직접 접근하지 못하도록 보호하고, 필요한 경우에만 제한적으로 접근할 수 있도록 하는 객체지향 프로그래밍(OOP)의 핵심 원칙 중 하나
이러한 캡슐화를 통해 얻을 수 있는 장점은 다음과 같음
-
데이터 무결성 유지 → 데이터를 외부에서 직접 변경할 수 없으므로, 잘못된 값이 들어가는 것을 방지할 수 있음
-
코드 유지보수성 증가 → 내부 구현이 변경되어도 외부 코드에 영향을 최소화할 수 있음
-
객체의 역할 분리 → 객체가 자신의 데이터를 스스로 관리하며, 외부에서는 필요한 기능만 호출할 수 있음

1. 캡슐화를 적용하기 위한 방법
1-1. 데이터 보호
외부에서 직접 변수(필드)에 접근할 수 없도록 private 접근 제어자를 사용
User.java
public class User {
private String password; // 외부에서 직접 접근할 수 없도록 private 키워드 활용
public User(String password) {
this.password = password;
}
}Main.java
public class Main {
public static void main(String[] args) {
User user = new User("mySecret");
System.out.println(user.password); // 외부에서 접근 불가 (컴파일 에러) ❌
}
}1-2. 제어된 접근
변수에 접근할 수 있도록 getter와 setter 같은 메서드를 제공하여 데이터를 안전하게 관리
BankAccount.java
public class BankAccount {
private double balance; // 잔액 정보
public BankAccount(double balance) {
this.balance = balance;
}
// getter(): 현재 잔액 조회
public double getBalance() {
return balance;
}
// setter(): 잔액 변경, 유효성 검사와 같은 로직을 작성할 수 있음
public void setBalance(double balance) {
if (balance >= 0) {
this.balance = balance;
} else {
System.out.println("잔액은 음수가 될 수 없습니다.");
}
}
}
Main.java
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(1000);
// 잔액 조회
System.out.println(account.getBalance()); // 1000.0
// 잔액 변경 (올바른 값)
account.setBalance(2000);
System.out.println(account.getBalance()); // 2000.0
// 잔액 변경 (잘못된 값)
account.setBalance(-500); // "잔액은 음수가 될 수 없습니다."
}
}
1-3. 내부 구현 숨기기
객체의 내부 동작을 감추고, 필요한 기능만 외부에 노출
Calculator.java
public class Calculator {
// 내부 구현 숨김: 직접 접근할 수 없는 private 메서드
private int add(int a, int b) {
return a + b;
}
// 외부에서 사용할 수 있는 메서드
public void showSum(int a, int b) {
int result = add(a, b); // add()는 Calculator.java 내부에서만 호출 가능
System.out.println("두 수의 합: " + result);
}
}Main.java
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
// 외부에서는 내부 로직을 모른 채 메서드만 사용
calculator.showSum(3, 5); // "두 수의 합: 8"
// 내부 메서드 직접 호출 불가 (컴파일 오류)
// calculator.add(3, 5); ❌
}
}
Last updated on