캡슐화
기술노트
📦 캡슐화 (Encapsulation)
캡슐화는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 데이터(속성)와 데이터를 처리하는 함수(메서드)를 하나로 묶고, 객체의 실제 구현 내용을 외부에 감추는 것을 의미합니다. 마치 알약이 캡슐 안에 약 성분을 담고 있는 것과 같습니다.
외부에서는 객체가 제공하는 메서드를 통해서만 데이터에 접근할 수 있으므로, 데이터의 무결성을 보장하고 의도치 않은 수정을 방지할 수 있습니다.
🧐 캡슐화의 목적
- 데이터 보호 (Data Hiding) : 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 숨겨, 데이터를 안전하게 보호합니다.
- 책임 분리 : 객체는 자신의 상태를 스스로 관리할 책임을 집니다. 외부에서는 객체의 내부 로직을 알 필요 없이, 제공된 기능만 사용하면 됩니다.
- 유지보수성 향상 : 객체의 내부 구현이 변경되더라도, 외부에 노출된 메서드만 그대로 유지된다면 다른 코드에 미치는 영향을 최소화할 수 있습니다.
☕️ 예시: 커피 자판기
사용자는 자판기의 버튼(메서드)을 누르기만 하면 커피가 나옵니다. 사용자는 자판기 내부의 복잡한 부품(데이터)이나 커피 제조 과정(내부 로직)을 전혀 알 필요가 없습니다. 만약 자판기 내부 부품이 바뀌더라도, 버튼을 누르면 커피가 나오는 기능은 동일하게 유지됩니다. 이것이 캡슐화의 본질입니다.
```java public class VendingMachine {
private int coffeeStock; // 내부 데이터는 private으로 숨김
// 외부에서는 이 메서드를 통해서만 커피를 얻을 수 있음 public Coffee getCoffee() { if (coffeeStock > 0) { coffeeStock--; return new Coffee(); } return null; }
} ```
💡 개발자 핵심 Point
- 캡슐화는 정보 은닉(Information Hiding)을 통해 객체의 자율성을 높이고, 외부의 부적절한 접근을 막는 중요한 원칙입니다.
- 실무에서는 클래스의 필드(멤버 변수)는 `private`으로 선언하고, 해당 필드에 접근할 수 있는 `public` 메서드(Getter/Setter)를 제공하는 것이 캡슐화의 가장 기본적인 구현 방법입니다.
- 캡슐화를 잘 지키면 객체 간의 의존성이 낮아져, 코드의 재사용성과 유지보수성이 크게 향상됩니다.