ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

캡슐화 (Encapsulation)

정의

“숨기고 보호”하여 변경을 격리하는 기술

객체 내부의 상태구현(로직)을 숨기고, 외부에는 안정적인 사용 방법(메서드)만 제공하는 원칙입니다.

핵심은 단순히 private을 붙이는 게 아니라, 변경 가능성이 높은 세부 구현이 외부 코드에 영향을 주지 않게 만드는 것입니다.

핵심 메시지

“캡슐화는 정보를 숨기는 것이 아니라,
변경이 새지 않게 경계를 세우는 것이다.”

- 변경이 퍼지면, 비용이 폭발한다 -

원칙

지켜야 할 3가지 기준이 있습니다.

1

상태는 직접 노출하지 않는다

필드 공개, setter 남발을 피하고 “행동(메서드)”으로만 상태가 바뀌게 만듭니다.
2

 불변 조건을 객체 내부에서 보장한다

“음수 금액 불가”, “한도 초과 불가” 같은 규칙을 외부가 아니라 객체가 스스로 지키게 합니다.
3

외부는 ‘무엇(What)’만, 내부는 ‘어떻게(How)’를 가진다

외부는 객체를 “사용”만 하고, 구현이 바뀌어도 호출 코드는 최대한 변하지 않게 합니다.

예시

setter 대신 “행동”으로만 상태를 바꾸기

👍 GOOD

상태 변경을 메서드로 제한(규칙 포함)

class Account {
    private int balance;

    public Account(int initial) {
        if (initial < 0) throw new IllegalArgumentException("initial must be >= 0");
        this.balance = initial;
    }

    public int balance() { return balance; }

    public void deposit(int amount) {
        if (amount <= 0) throw new IllegalArgumentException("amount must be > 0");
        balance += amount;
    }

    public void withdraw(int amount) {
        if (amount <= 0) throw new IllegalArgumentException("amount must be > 0");
        if (balance < amount) throw new IllegalStateException("insufficient funds");
        balance -= amount;
    }
}

👎 BAD

외부가 상태를 직접 조작

class Account {
    private int balance;
    public int getBalance() { return balance; }
    public void setBalance(int balance) { this.balance = balance; } // ❌ 규칙 없음
}

Account a = new Account();
a.setBalance(-1000); // 불변 조건 붕괴

💡 TIP / 참고사항

“캡슐화가 잘 되었다”는 건 데이터를 숨겼다보다, 변경이 생길 때 수정 범위를 ‘객체 내부’로 가뒀다에 가깝습니다.

728x90