접근 제어자

김재익·2023년 6월 15일
0

JAVA

목록 보기
4/18
post-thumbnail

제어자 : 클래스, 변수, 메서드의 상태를 통제할 때 사용한다.
클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여해 준다.
하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근 제어자는 단 하나만 사용할 수 있다.

public

접근 제한이 전혀 없다

protected

같은 [패키지] 내에서, 다른 패키지의 [자손클래스]에서 접근 가능

default

같은 [패키지] 내에서만 접근 가능

private

같은 [클래스] 내에서만 접근 가능

접근 제어자 사용처

클래스 : public, default
메서드 & 멤버변수 : 모두 사용 가능
지역변수 : 없음

의문점

private 접근제어자는 왜 사용하는 걸까?

private 접근제어자는 같은 클래스 내에서만 사용이 가능하다. 이는 다른 클래스에서 해당 클래스를 생성해도 Class.valueName 으로 접근 할 수 없다는 뜻이다.
이는 객체의 무결성 즉, 변경이 없는 상태를 유지하기 위함이다.

하여 우리는 GetterSetter를 통해 해당 객체가 허락한 값만 받고 수정 할 수 있다.

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는 어떻게 다뤄야할까?

맞다 Setterprivate의 기능을 의미없게 만드는 장치이다. 그러하기 때문에 Setter는 값의 수정이 꼭 필요한 변수에만 만들어야 한다.
Setter가 없는 변수는 선언단계에서 값을 넣어놓거나 생성자를 통해 값이 들어가도록 설계 하여야한다.

제어자의 조합

사용 가능한 제어자

  • 클래스 : public, default, final, abstract
  • 메서드 : public, protected, default, private, final, abstract, static
  • 멤버변수 : public, protected, default, private, final, static
  • 지역변수 : final

⚠️ 제어자 사용시 주의 사항

  • 메서드에 staticabstract를 함께 사용할 수 없다.
  • 클래스에 abstractfinal을 동시에 사용할 수 없다.
  • abstract메서드의 접근 제어자가 private일 수 없다.
  • 메서드에 privatefinal을 같이 사용할 필요는 없다.
profile
개발자호소인

0개의 댓글