본문 바로가기

자바

getter와 setter, 생성자의 접근 제어자

겟터와 셋터를 사용하는 이유는 중요한 변수에 바로 접근을 하지 못하게 하고 값을 설정함에 있어서 데이터가 올바른지 검증을 해주기 위해서 만든다.

객체지향의 캡슐화에 해당하는 부분이라 할 수 있다. 접근제어자를 통해서 이러한 기능을 사용하게 된다.


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을 붙여주어 상속할 수 없는 클래스임을 나타나는게 좋다.