Last updated
Last updated
private 키워드를 사용하면 클래스 외부의 접근을 차단하겠다는 의미이다.
접근을 차단하기만 하면 이용할 수 없기 때문에, 반드시 우회적으로 이용할 수 있는 방법을 마련해야 하며, 변수, 메소드, 생성자 등 클래스의 구성요소들을 원한다면 private 으로 잠금 처리할 수 있다.
score를 설정하는 과정을 그림으로 살펴보면 다음과 같다.
클래스에 직접 접근하는 것은 아니지만 인스턴스가 클래스의 형태와 동일하기 때문에 클래스에 표기하였으며, score
로의 직접 접근은 private
키워드에 의해 차단되었기 때문에 우회적으로 setScore
메소드를 이용할 수밖에 없으며, setScore
에 작성된 조건으로 인하여 0~100값을 제외한 나머지는 차단됨을 알 수 있다.
이 내용을 살펴보기에 앞 static
관련 내용을 먼저 알아야 한다.
Utility 클래스의 경우 단순 계산을 위한 클래스로 객체 생성 없이 편하게 호출할 수 있도록 메소드들을 모두 정적(static) 처리하고 생성자를 private 처리하여 객체 생성이 불가능하도록 구현하였다. 이처럼 자주 사용할 것으로 예상되는 객체와 연관없는 기능들은 정적 처리하고 객체 생성을 금지하면 좀 더 나은 성능을 보여준다.
데모 2에서는 객체로서의 기능을 완전히 사용하지 못하도록 구성했지만, 데모 3에서는 객체의 기능은 유지한 채 개수만 제어하기 위한 코드를 작성하였다.
우선 생성자를 잠금 처리하여 객체 생성이 외부에서 이루어지지 못하도록 진행하였다.
클래스 내부에서 정적 변수로 master라는 id, 5000포인트를 가진 매니저 객체를 단 하나만 생성해둔 뒤 이용할 수 있도록 getter 메소드를 구현해두었다. 따라서, 외부에서는 이미 만들어진 manager만 대여 형식으로 이용할 수 있게 되며, 의도적으로 해당 클래스의 객체 수를 모든 프로그램을 통틀어 1개로 제어할 수 있다.
이렇게 객체의 전체 개수를 제어하여 일관성을 유지하도록 구현하는 방식을 싱글톤(singleton) 방식이라고 한다.
위의 코드에서 m1과 m2는 같은 대상을 바라보는 참조 변수이다.