캡슐화는 호출 클래스를 단절하여 변경으로부터 보호합니다.
자동차 엔진을 모델링하는 간단한 클래스가 있다고 가정 해 봅시다 (모든 OO 예제에는 자동차 유추가 포함되어야합니다 :)). 이 같은 간단한 필드가있을 수 있습니다 :
private bool engineRunning;
단순히이 필드를 공개하거나 다른 것으로 나타나지 않는 IsEngineRunning() 게터을 제공한다. 당신이 가서이를 변경해야 이전
engineRunning
필드를 액세스하는 많은 클래스가있는 경우 지금
private bool ignitionOn;
private bool starterWasActivated;
:
이제 해당 필드를 제거하고 그것을 대체 할, 당신은 당신의 클래스가 더 정교하게 가정 모두 (나쁜시기).
당신이 시작했던 대신하는 경우 :
public bool IsEngineRunning()
{
return this.engineRunning;
}
당신은 지금은 변경할 수 :
이
public bool IsEngineRunning()
{
return ignitionOn && starterWasActivated;
}
및 클래스의 인터페이스는 동일 (좋은 시간을) 남아있다.
합니다. 이전과 같은 방식으로 동일한 의미로 engineRunning 속성을 노출해야 함을 의미합니다. 유일한 차이점은 점화 및 스타터 속성을 업데이트 할 때마다 engineRunning 속성도 업데이트해야한다는 것입니다. 읽기/업데이트 빈도에 따라 성능에 긍정적 또는 부정적 영향을 미칠 수 있습니다. –