객체 지향을 설명할 때 캡슐화는 정말 자주 등장합니다. 그런데 입문 단계에서는 이를 단순히 “필드를 private으로 감추는 것” 정도로 이해하고 넘어가는 경우가 많습니다. 실제로는 그보다 더 중요한 질문이 있습니다. “이 객체는 자신의 상태와 규칙을 어떻게 지킬 것인가”입니다.
이 글에서는 아래 내용을 정리합니다.
- 캡슐화가 무엇인지
- 왜 중요한지
- private과 어떤 관계가 있는지
- 입문자가 어떤 식으로 이해하면 좋은지
핵심은 캡슐화는 데이터를 숨기는 기술이 아니라, 객체가 자신의 상태와 규칙을 스스로 책임지게 만드는 설계 방식이라는 점입니다.
캡슐화란 무엇인가
캡슐화는 관련 있는 상태와 동작을 함께 묶고, 외부에서 함부로 내부 상태를 망가뜨리지 못하게 경계를 두는 것입니다.
즉:
- 상태는 객체 안에 두고
- 그 상태를 바꾸는 방식도 객체가 관리하게 하자
는 방향에 가깝습니다.
왜 중요한가
외부 코드가 객체 내부 상태를 아무 방식으로나 바꾸기 시작하면:
- 규칙이 쉽게 깨지고
- 어디서 상태가 잘못됐는지 추적하기 어려우며
- 변경 영향이 커집니다
캡슐화가 잘 되어 있으면 객체는 자신의 규칙을 내부에서 지킬 수 있습니다.
예를 들어 주문 객체가 있는데 외부에서:
- 총액을 직접 수정
- 상태를 임의로 변경
할 수 있다면, 비즈니스 규칙이 무너지기 쉽습니다.
private만 붙이면 캡슐화일까
완전히 그렇지는 않습니다.
private은 캡슐화를 돕는 도구일 수 있지만, 핵심은:
- 외부가 무엇을 해도 되는지
- 어떤 변경은 객체 스스로만 하게 할지
를 설계하는 데 있습니다.
즉, getter/setter를 잔뜩 두고 아무 제약 없이 값을 바꾸게 하면 private을 써도 캡슐화가 약할 수 있습니다.
입문자는 어떻게 이해하면 좋을까
아래 질문이 도움이 됩니다.
- 이 객체의 상태를 바꾸는 규칙은 어디에 있어야 하나
- 외부에서 직접 값을 건드리면 안 되는 이유가 있는가
- 상태 변경이 의미 있는 행동으로 드러나는가
이 질문을 통해 “값 수정”이 아니라 “행동 요청” 중심으로 보는 감각이 생깁니다.
자주 하는 오해
1. 캡슐화는 무조건 숨기기다
무작정 숨기는 것이 아니라, 필요한 인터페이스는 드러내되 내부 규칙은 보호하는 것이 중요합니다.
2. getter/setter가 있으면 충분하다
값을 그대로 노출하고 그대로 바꾸게 하면 규칙 보호가 약할 수 있습니다.
3. 작은 클래스에는 캡슐화가 중요하지 않다
작은 객체일수록 책임이 명확하게 드러나는 캡슐화가 더 도움될 때도 많습니다.
FAQ
Q. 캡슐화는 왜 유지보수에 도움이 되나
상태 변경 경로가 명확해지고, 규칙이 한곳에 모여서 수정 영향이 줄어들기 때문입니다.
Q. 모든 필드를 private으로 해야 하나
언어와 상황에 따라 다르지만, 핵심은 접근 제한 그 자체보다 규칙 보호입니다.
Q. 입문자는 무엇부터 연습하면 좋을까
상태를 직접 수정하게 하지 않고, 의미 있는 메서드로 행동을 표현해보는 것부터 시작하면 좋습니다.
Read Next
- 객체 지향의 큰 그림은 객체 지향 프로그래밍 가이드와 이어집니다.
- 책임과 변경 경계 관점은 SRP 가이드와 같이 보면 좋습니다.
심사 대기 중에는 광고 대신 관련 가이드를 먼저 보여줍니다.
먼저 읽어볼 가이드
검색 유입이 많은 핵심 글부터 이어서 보세요.
- 미들웨어 트러블슈팅 가이드: Redis vs RabbitMQ vs Kafka 개발자를 위한 미들웨어 트러블슈팅 허브 글입니다. Redis, RabbitMQ, Kafka 중 어떤 증상부터 먼저 봐야 하는지와 어떤 문제 패턴이 각 시스템에 가까운지 정리합니다.
- Kubernetes CrashLoopBackOff: 먼저 볼 것들 startup failure, probe, config, resource limit 관점에서 CrashLoopBackOff를 어떻게 나눠서 봐야 하는지 정리한 가이드입니다.
- Kafka consumer lag가 계속 늘 때: 트러블슈팅 가이드 Kafka consumer lag가 계속 늘어날 때 무엇부터 봐야 하는지 정리합니다. poll 주기, 처리 속도, rebalance, consumer 설정까지 실전 기준으로 다룹니다.
- Kafka Rebalancing Too Often 가이드 Kafka consumer group에서 rebalance가 너무 자주 일어날 때 membership flapping, poll timing, protocol, assignment churn을 어떤 순서로 봐야 하는지 설명하는 실전 가이드입니다.
- Docker container가 계속 재시작될 때: 먼저 확인할 것들 exit code, command failure, environment mistake, health check 관점에서 Docker restart loop를 푸는 실전 가이드입니다.
심사 대기 중에는 광고 대신 관련 가이드를 먼저 보여줍니다.