제어자 : 클래스, 변수, 메서드의 상태를 통제할 때 사용한다.
클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여해 준다.
하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근 제어자는 단 하나만 사용할 수 있다.
접근 제한이 전혀 없다
같은 [패키지] 내에서, 다른 패키지의 [자손클래스]에서 접근 가능
같은 [패키지] 내에서만 접근 가능
같은 [클래스] 내에서만 접근 가능
클래스 : 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
, abstract
public
, protected
, default
, private
, final
, abstract
, static
public
, protected
, default
, private
, final
, static
final
⚠️ 제어자 사용시 주의 사항
static
과 abstract
를 함께 사용할 수 없다.abstract
와 final
을 동시에 사용할 수 없다.abstract
메서드의 접근 제어자가 private
일 수 없다.private
와 final
을 같이 사용할 필요는 없다.