
private앞선 문제를 근본적으로 해결하는 방법은 volume 필드를 Speaker 클래스 외부에서는 접근하지 못하게 막는 것이다.
private으로 수정package access;
public class Speaker {
private int volume; // private 사용
...
}
private 접근 제어자는 모든 외부 호출을 막는다. 따라서 private이 붙은 경우 해당 클래스 내부에서만 호출할 수 있다.

그림을 보면 volume 필드를 private을 사용해서 Speaker 내부에 숨겼다.
외부에서 volume 필드에 직접 접근할 수 없게 막은 것이다. volume 필드는 이제 Speaker 내부에서만 접근할 수 있다.
// 필드에 직접 접근
System.out.println("volume 필드 직접 접근 수정");
speaker.volume = 200; // private 접근 오류
IDE에서 speaker.volume = 200 부분에 오류가 발생하는 것을 확인할 수 있다. 실행해보면 다음과 같은 컴파일 오류가 발생한다.
컴파일 오류 메시지

volume 필드는 private으로 설정되어 있기 때문에 외부에서 접근할 수 없다는 오류이다.
// 필드에 직접 접근
System.out.println("volume 필드 직접 접근 수정");
// speaker.volume = 200; // private 접근 오류
speaker.showVolume();
이제 Speaker 외부에서 volume 필드에 직접 접근하는 것은 불가능하다. 이 경우 자바 컴파일러가 컴파일 오류를 발생시킨다.
참고 : 좋은 프로그램은 무한한 자유도가 주어지는 프로그램이 아니라 적절한 제약을 제공하는 프로그램이다.