제어자 : 클래스, 변수, 메서드의 상태를 통제할 때 사용한다.
클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여해 준다.
하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근 제어자는 단 하나만 사용할 수 있다.
접근 제한이 전혀 없다
같은 [패키지] 내에서, 다른 패키지의 [자손클래스]에서 접근 가능
같은 [패키지] 내에서만 접근 가능
같은 [클래스] 내에서만 접근 가능
클래스 : public, default
메서드 & 멤버변수 : 모두 사용 가능
지역변수 : 없음
private접근제어자는 왜 사용하는 걸까?
private 접근제어자는 같은 클래스 내에서만 사용이 가능하다. 이는 다른 클래스에서 해당 클래스를 생성해도 Class.valueName 으로 접근 할 수 없다는 뜻이다.
이는 객체의 무결성 즉, 변경이 없는 상태를 유지하기 위함이다.
하여 우리는 Getter와 Setter를 통해 해당 객체가 허락한 값만 받고 수정 할 수 있다.
private String model;
private String coloe;
private double price;
public String getModel() {
return model;
}
public String getColor() {
return color;
}
public double getPrice() {
return price;
}
public void setModel(String model) {
this.model = model;
}
public void setColor(String color) {
this.color = color;
}
public void setPrice(double price) {
this.price = price;
}
이렇게 객체 내에서 제공하고싶은 변수들을 정할 수 있게 만들어야 객체가 가진 값에 무결성이 확보 되는 것이다.
무결성을 해칠 것 같은
Setter는 어떻게 다뤄야할까?
맞다 Setter는 private의 기능을 의미없게 만드는 장치이다. 그러하기 때문에 Setter는 값의 수정이 꼭 필요한 변수에만 만들어야 한다.
Setter가 없는 변수는 선언단계에서 값을 넣어놓거나 생성자를 통해 값이 들어가도록 설계 하여야한다.
사용 가능한 제어자
public, default, final, abstractpublic, protected, default, private, final, abstract, staticpublic, protected, default, private, final, staticfinal⚠️ 제어자 사용시 주의 사항
static과 abstract를 함께 사용할 수 없다.abstract와 final을 동시에 사용할 수 없다.abstract메서드의 접근 제어자가 private일 수 없다.private와 final을 같이 사용할 필요는 없다.