본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

Chap_07. 접근 제어자

by TIS_Ha 2023. 4. 27.
반응형

접근 제어자 
private : 해당 클래스 내에서만 접근 가능
public : 모든 클래스에서 접근 가능
default : 같은 패키지 내에서만 접근 가능, 아무 접근제어자도 설정하지 않았을때 기본값.
protected : 같은 패키지 내에서는 접근 가능, 다른 패키지인 경우 자식 클래스에서만 접근 가능

 

접근제어자를 학습하기 위하여 BlackBoxRefurbish라는 클래스를 새로 생성하였다.

Tip) Getter & Setter 를 쉽게 생성하는 법

  1. 변수를 선언한다
  2. 상단 바 중 [Code]-[Generate] 메뉴 접근
  3. 팝업 내 [Getter and Setter] 클릭
  4. Getter와 Setter를 생성할 변수 클릭 (Ctrl 이나 Shift를 이용하면 복수선택 가능)

이전 Getter & Setter 시간에 학습한 예제를 활용해서 다시 한번 학습해보자.

자동 생성된 Getter & Setter에 지난시간에 학습한 예시를 아래와 같이 추가해주었다.

1) resolution 값이 null 이거나 빈문자 일 때 "판매자에게 문의하세요" 리턴 (resolution 값이 있을때는 resolution 리턴)

2) 수정한 price 값이 10만원 이하일때 price 값은 10만원으로 변경

    public String getResolution() {
        if(resolution == null || resolution.isEmpty()){
            return "판매자에게 문의하세요.";
        }
        return resolution;
    }
    
    
   public void setPrice(int price) {
        if(price<100000){
            this.price = 100000;
        }else{
            this.price = price;
        }
    }

BlackBoxRefurbish 클래스를 이용하여 접근제어자를 이해해보자.

_10_AccessModifier 라는 클래스를 생성하고 아래와 같이 테스트해보았다.

위 예제에서 price 관련 로직을 좀 더 자세하게 확인해보자.

        b1.setPrice(-5000);
        System.out.println("가격 : "+b1.getPrice() + "원");
        b1.price = -5000;
        System.out.println(b1.price);
  1. b1.setPrice(-5000); -> BlackBoxRefurbish 클래스 내 setPrice(-5000) 호출
  2. price 값에 -5000 을 적용하려고 하지만, 10만원 미만 값이므로 price는 10만원으로 적용된다.
  3. b1.getPrice() 호출 시 위 적용된 price값인 10만원이 출력된다.
  4. 이후 b1.price 값을 -5000 으로 적용하였다.
  5. b1.price 출력 시에는 -5000 으로 출력된다.

결국 Getter & Setter를 이용하지 않을 시에는 price 값을 -5000으로 설정할 수 있게되는 것이다.

이러한 문제를 방지하기 위하여 접근 제어자를 활용할 수 있다.

 

기존의 int price에 접근자 private을 설정하였다.

private : 해당 클래스 내에서만 접근 가능한 특징을 가진다.

 

즉 다른 클래스에서 BlackBoxRefurbish 의 price 값을 직접 접근할 수 없고,

해당 값에 접근하기 위해서는 Getter & Setter를 통해서만 접근 및 수정이 가능하게 된다.

 

위와 같이 price 변수의 접근제어자를 private로 선언 후 _10_AccessModifier 클래스를 다시 확인해보게되면 아래와 같이 오류가 발생되고 있는 것을 확인할 수 있다.

오류) 'price' has private acces in 'chap_07.BlackBoxRefurbish'

 


이번에는 public, default, protected 접근제어자에 대해서도 확인해보자.

private : 해당 클래스 내에서만 접근 가능
public : 모든 클래스에서 접근 가능
default : 아무것도 적지 않았을때, 같은 패키지 내에서만 접근 가능
protected : 같은 패키지 내에서는 접근 가능, 다른 패키지인 경우 자식 클래스에서만 접근 가능

public String modelName;  -> modelName 변수의 접근제어자 : public

String resolution; -> resolution 변수의 접근제어자 : default (아무것도 입력하지않은경우 default)

private int price; -> price 변수의 접근제어자 : private

protected String color; -> color 변수의 접근제어자 : protected

 

이번에는 다른 패키지를 생성하여 확인해보자.

- BlackBoxRefurbish 클래스는 chap_07 패키지 안에 생성되어 있다. 

- chap_08 이라는 새로운 패키지를 생성하고, 그 안에 _00_AccessModifierTest 클래스를 생성하였다.

chap_08._00_AccessModifierTest에서 BlackBoxRefurbish의 변수 접근 시 위와 같이 오류가 발생된다.

b1.modelName 은 접근제어자 public (모든 클래스에서 접근가능) 이므로 문제없음.

b1.resolution 은 접근제어자 default(같은 패키지-chap_07 내에서만 접근 가능) 이므로 오류.

b1.private 은 접근제어자 private (해당 클래스-BlackBoxRefurbish 내에서만 접근 가능) 이므로 오류.

b1.color 은 접근제어자 protected (같은 패키지 내에서는 접근 가능, 다른 패키지인 경우 자식 클래스에서만 접근 가능) 이므로 오류.

 

메소드나 클래스에도 해당 접근제어자를 설정할 수 있다.

- 기본적으로 클래스는 public 접근제어자로 선언되며 다른 접근제어자로 설정을 바꿀 수 있다. class A {   }

- public 클래스일때는 .java 파일의 이름과 동일해야한다.


캡슐화(Encapsulation) : 서로 연관된 것들끼리만 하나의 캡슐에 담는 특성.

> BlackBox 클래스 내에는 블랙박스에 관련된 내용만 담는다.

 

정보은닉(Information hiding) : 객체 내에 있는 변수나 메소드로 직접적인 접근을 막고, 객체에서 허용해주는 형태로만 접근이 가능하도록 하는 특성. (주로 접근제어자로 설정)

반응형

'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글

Chap_07. 상속  (0) 2023.04.28
Chap_07. 패키지  (0) 2023.04.28
Chap_07. Getter & Setter  (0) 2023.04.26
Chap_07. 생성자  (0) 2023.04.25
Chap_07. This  (1) 2023.04.25

댓글