겟터와 셋터를 사용하는 이유는 중요한 변수에 바로 접근을 하지 못하게 하고 값을 설정함에 있어서 데이터가 올바른지 검증을 해주기 위해서 만든다.
객체지향의 캡슐화에 해당하는 부분이라 할 수 있다. 접근제어자를 통해서 이러한 기능을 사용하게 된다.
private int number;
public int getNumber(){
return number;
}
public void setNumber(int number){
// 값을 셋팅해주기전에 검증해줄 코드
this.number=number
}
만약위에서 작성한 클래스가 상속될 여지가 있다면
protected int number;
작성하여 겟터 셋터를 만들어 주면 될 것이다.
생성자역시 바로 접근하지 못하도록 우회하여 접근하게 만들어 줄 수 있다.
class Singleton{
private static Singleton s =new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return s;
}
}
class SingletonTest{
public static void main(String[] args){
// Singleton s = new Singleton(); 생성자가 private 이므로 접근 불가
Singleton s = Singleton.getInstance();
}
}
위의 예제를 통하여 얻을 수 있는 또 다른 이점은 사용할 수 있는 인스턴스의 개수를 제한 할 수 있다는 점이다.
위의 예제를 통하여 만들어낸 Singleton의 인스턴스는 아무리 많이 만들어도 하나밖에 생성이 되지 않는다.
즉 모든 인스턴스가 하나의 주소만을 가리키게 된다는 이야기.
어떤 클래스의 생성자가 private 라면 조상클래스가 될 수 없음을 주의해야 한다.
자손클래스의 인스턴스를 생성할때마다 조상클래스의 생성자를 호출하기 때문이다.
그러므로 생성자가 private인 클래스 앞에 final을 붙여주어 상속할 수 없는 클래스임을 나타나는게 좋다.
'자바' 카테고리의 다른 글
Singleton 이해하는 예제 (0) | 2014.02.19 |
---|---|
업캐스팅 / 다운캐스팅 - 참조변수의 형변환 instanceof (0) | 2014.01.19 |
접근제어자와 제어자 (0) | 2014.01.19 |
초기화 블럭 - 변수 선언의 또 다른 방법 (0) | 2014.01.15 |
생성자를 이용한 인스턴스의 복사 (0) | 2014.01.15 |