예를 들어 새가 나는 모습을 화면에 출력하기 위해 ‘새’ 클래스를 사용하는 경우 날기() 기능을 이용해 코드를 작성할 것입니다. 이때 프로그래머는 새가 어떻게 나는지 날기() 기능의 내부 코드를 신경 쓰지 않습니다. ‘새’ 클래스에 문제가 있어 수정하거나 새로운 기능을 추가하는 것이 아니고 단순히 사용하기만 하기 때문에 클래스 내부의 구현을 일일이 알 필요가 없습니다. 이와 같이 새가 날고, 걷고, 먹는 것을 구현하는 내부적인 원리를 다 숨기고, 날기·걷기·먹기 기능을 사용하기 위해 필요한 인터페이스만 노출하는 것을 캡슐화라고 합니다.
그림 3-3 ‘새’ 클래스의 캡슐화
캡슐화를 하면 외부에 노출할 것과 아닌 것을 구별함으로써 불필요한 정보를 노출하지 않을 수 있습니다. 즉 정보 은닉이 가능하다는 장점이 있어 코드의 유지·보수성과 재사용성이 높아집니다. 예를 들어 ‘새’ 클래스의 날갯짓 원리를 수정해야 한다면 내부적으로 숨겨진 날개짓 원리만 수정하면 됩니다. ‘새’ 클래스를 사용하는 입장에서는 인터페이스가 변경된 것이 아니기 때문에 ‘새’ 클래스를 사용한 코드를 수정할 필요가 없습니다.