[Java] 은닉화와 캡슐화

우노구나·2025년 8월 11일

은닉화와 캡슐화는 학교 수업에서 이미 다루었던 내용이기도 하고, 완벽하지는 않지만 어느정도 개념이 잡혀있는 상태라 짧게 정리하였다.

은닉화 (Information Hiding)

개인적으로 번역이 조금 직관적이지 않다고 생각하는 개념이다. 지금은 이해하는데 전혀 무리가 없지만 처음 배웠을 때는 영어가 훨씬 직관적인 의미를 지닌다고 생각했었다.

  • 의미: 클래스의 내부 구현(데이터, 로직)을 외부에서 직접 보지 못하게 감추는 것

  • 목적: 외부에서 객체 내부를 직접 조작하지 못하게 하여, 데이터 무결성과 안정성을 보장 (외부 변화에 영향을 받지 않게 한다.)

  • 방법: private 접근제한자를 사용해 필드(멤버 변수)를 외부에서 직접 접근하지 못하게 함

  • 예시:

public class BankAccount {
    private int balance; // 외부에서 직접 접근 불가

    public BankAccount(int initialBalance) {
        balance = initialBalance;
    }

    public int getBalance() { // 읽기 가능
        return balance;
    }

    public void deposit(int amount) { // 쓰기 가능, 검증 포함
        if (amount > 0) {
            balance += amount;
        }
    }
}
  • balanceprivate으로 숨겨져 있고, 외부에서는 getBalance()deposit() 같은 공개 메서드로만 접근 가능

  • 즉, 필드(데이터)와 내부 구현을 "숨기는 것"이 은닉화


    캡슐화 (Encapsulation)

  • 의미: 데이터(필드)와 해당 데이터를 처리하는 메서드(행위)를 하나의 "클래스" 안에 묶는 것

  • 목적: 객체의 상태와 행위를 하나로 묶어서, 객체 단위로 관리하고 재사용하기 쉽게 함

  • 방법: 클래스 설계 시 필드 + 메서드를 함께 정의

  • 예시:

public class Car {
    private int speed; // 데이터
    private String model;

    public Car(String model) {
        this.model = model;
    }

    // 데이터와 관련된 행위
    public void accelerate(int increment) {
        if (increment > 0) {
            speed += increment;
        }
    }

    public int getSpeed() {
        return speed;
    }
}
  • speed(상태)와 accelerate()(행위)를 같은 객체(Car)에 묶음

  • 이처럼 상태와 동작을 하나로 묶어 관리하는 것이 캡슐화

profile
기술 블로그

0개의 댓글