캡슐화의 예시를 종합감기약을 예시로 들수 있다.
종합감기약을 먹으면 코감기와 재채기, 두통이 낫는다. (책의 예시에서는 코감기가 두 번…(?))
Non-Encapsulation
아래의 소스는 캡슐화를 적용하지 않은 소스다.
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | class SinivelCap {public void take() {
 System.out.println("콧물 감기가 낫습니다!");
 }
 }
 
 class SneezeCap {
 public void take() {
 System.out.println("재치기가 낫습니다!");
 }
 }
 
 class SnuffleCap {
 public void take() {
 System.out.println("코감기가 낫습니다!");
 }
 }
 
 class ColdPatiend {
 public void takeSinivelCap(SinivelCap cap) { cap.take(); }
 public void takeSneezeCap(SneezeCap cap) { cap.take(); }
 public void takeSnuffleCap(SnuffleCap cap) { cap.take(); }
 }
 
 public class NotEncapsulation {
 public static void main(String[] args) {
 ColdPatiend sufferer = new ColdPatiend();
 sufferer.takeSinivelCap(new SinivelCap());
 sufferer.takeSneezeCap(new SneezeCap());
 sufferer.takeSnuffleCap(new SnuffleCap());
 }
 }
 
 | 
전체적으로 보면은 종합감기약 같지만 결국은 기능에 맞는 알약을 하나하나 먹는 것과 같다. 그래서 3개의 알약을 먹게 된다. 종합감기약과는 다른 의미가 되어버린다.
Encapsulation
그러면 이제 캡슐화(Encapsulation)을 이용해서 종합감기약의 기능을 구현해보자.
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 | class SinivelCap {public void take() {
 System.out.println("콧물 감기가 낫습니다!");
 }
 }
 
 class SneezeCap {
 public void take() {
 System.out.println("재치기가 낫습니다!");
 }
 }
 
 class SnuffleCap {
 public void take() {
 System.out.println("코감기가 낫습니다!");
 }
 }
 
 class Pill {
 private SinivelCap sinivelCap;
 private SneezeCap sneezeCap;
 private SnuffleCap snuffleCap;
 
 public Pill() {
 sinivelCap = new SinivelCap();
 sneezeCap = new SneezeCap();
 snuffleCap = new SnuffleCap();
 }
 
 public void take() {
 sinivelCap.take();
 sneezeCap.take();
 snuffleCap.take();
 }
 }
 
 class ColdPatient {
 public void takePill(Pill pill) { pill.take(); }
 }
 
 public class Encapsulation {
 public static void main(String[] args) {
 ColdPatient coldPatient = new ColdPatient();
 coldPatient.takePill(new Pill());
 
 
 
 
 
 }
 }
 
 | 
캡슐화는 보기에는 쉬우나, 범위를 결정하는 것이 쉽지 않다. 경험있는 프로그래머를 구분하는 첫 번째 기준이 된다고 한다.