Skip to Content
Suffering builds character
아카이브10.Java특징캡슐화1. 캡슐화

1. 캡슐화

캡슐화(Encapsulation)란, 객체의 데이터(속성)를 외부에서 직접 접근하지 못하도록 보호하고, 필요한 경우에만 제한적으로 접근할 수 있도록 하는 객체지향 프로그래밍(OOP)의 핵심 원칙 중 하나

이러한 캡슐화를 통해 얻을 수 있는 장점은 다음과 같음

  1. 데이터 무결성 유지 → 데이터를 외부에서 직접 변경할 수 없으므로, 잘못된 값이 들어가는 것을 방지할 수 있음

  2. 코드 유지보수성 증가 → 내부 구현이 변경되어도 외부 코드에 영향을 최소화할 수 있음

  3. 객체의 역할 분리 → 객체가 자신의 데이터를 스스로 관리하며, 외부에서는 필요한 기능만 호출할 수 있음

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. 제어된 접근

변수에 접근할 수 있도록 gettersetter 같은 메서드를 제공하여 데이터를 안전하게 관리

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