클래스에 직접 접근하는 것은 아니지만 인스턴스가 클래스의 형태와 동일하기 때문에 클래스에 표기하였으며, score로의 직접 접근은 private 키워드에 의해 차단되었기 때문에 우회적으로 setScore 메소드를 이용할 수밖에 없으며, setScore에 작성된 조건으로 인하여 0~100값을 제외한 나머지는 차단됨을 알 수 있다.
classUtility {privateUtility(){}publicstaticintrandom(int begin,int end){Random r =newRandom();returnr.nextInt(end - begin +1) + begin; }}publicclassAccessModifierExample02 {publicstaticvoidmain(String[] args){//Utility utility = new Utility();//error 발int dice =Utility.random(1,6);System.out.println("주사위 = "+ dice);int lotto =Utility.random(1,45);System.out.println("로또 = "+ lotto); }}
Utility 클래스의 경우 단순 계산을 위한 클래스로 객체 생성 없이 편하게 호출할 수 있도록 메소드들을 모두 정적(static) 처리하고 생성자를 private 처리하여 객체 생성이 불가능하도록 구현하였다. 이처럼 자주 사용할 것으로 예상되는 객체와 연관없는 기능들은 정적 처리하고 객체 생성을 금지하면 좀 더 나은 성능을 보여준다.
클래스 내부에서 정적 변수로 master라는 id, 5000포인트를 가진 매니저 객체를 단 하나만 생성해둔 뒤 이용할 수 있도록 getter 메소드를 구현해두었다. 따라서, 외부에서는 이미 만들어진 manager만 대여 형식으로 이용할 수 있게 되며, 의도적으로 해당 클래스의 객체 수를 모든 프로그램을 통틀어 1개로 제어할 수 있다.
이렇게 객체의 전체 개수를 제어하여 일관성을 유지하도록 구현하는 방식을 싱글톤(singleton) 방식이라고 한다.