Java 개념

접근제어자

ron_nie 2023. 7. 2. 15:04
728x90

1. 종류

  1. private : 해당 클래스 내에서만 접근 가능하다
  2. public : 모든 클래스에서 접근 가능하다.
  3. default(기본값) : 같은 패키지 내에서만 접근 가능하다
  4. protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근 가능

2. 활용

아까 처럼 직원이 실수 했다고 가정하자.

// 객체 만들기
 BlackBoxRefurbish b1 = new BlackBoxRefurbish();
b1.modelName = "까망이";
b1.setPrice(200000);
b1.color = "블랙";
// 직원 실수
b1.setPrice(-5000);
System.out.println(b1.getPrice()); // -5000

// 고객 문의
System.out.println("해상도 : " + b1.resolution); // null

이번엔 setPrice로 가격을 바꿔 버리고 해상도도 넣지 않았다. 그래서 화가 잔뜩 나서 BlackBoxRefurbish라는 클래스에 변수들을 제한해버렸다.

public String modelName; // 어디서든지 접근 가능
String resolution; // default 기본값
private int price;
protected String color; // 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근 가능

그리고 getter와 setter을 만들었다.

 public String getModelName() {
        return modelName;
    }

    public void setModelName(String modelName) {
        this.modelName = modelName;
    }

    public String getResolution() {
        if (resolution == null || resolution.isEmpty()) { //// resolution이라는 변수가 null이거나 빈문자열이면
            return "판매자에게 문의하세요.";
        }
        return resolution; // 해상도에 관한 정보가 없다면 벨리데이션
    }

    public void setResolution(String resolution) {
        this.resolution = resolution;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        if (price < 100000) {
            this.price = 100000;
        } else {
            this.price = price; // 가격을 -5000으로 설정하였기 때문에 최소금액을 설정하면 됨.
        }
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

3. 꿀팁

만약 아예 이 클래스를 건들지 않게 하고 싶다면?

BlackBoxRefurbish라는 클래스에 가서 변수에 private을 붙여주자 ( getter와 setter로 바꿔야하는건 덤)

반응형