[Java] Class - 접근 제어자(access modifier) #5

BE/Basic 2024. 1. 4.

  목  차

  • 접근 제어자
  • getter 와 setter

 

 


 

  접근 제어자

 

접근 제어자는 사용자가 Class에 대해서 어디까지 접근할 수 있게 하는 가를 정하는 것이다. 

캡슐화라고도 하며, 구성요소 중 일부만 밖으로 공개하여 사용 중에 오용이나 혼란을 방지한다.

(참고: 얄코님의 제대로 파는 자바)

 

 

다음은 각 제어자에 대한 비교표이다.

 

 

public: 어떤 클래스에서든지 접근할 수 있다.

protected: 같은 패키지 내부와, 자신을 상속한 클래스에서 접근이 가능하다.

default: 아무 것도 지정하지 않았을 때의 상태이다. 같은 패키지 내부에서만 접근이 가능하다.

private: 오직 정의된 클래스 내부에서만 접근이 가능하다.

 

 


 

  getter 와 setter

 

private 접근 제어자는 클래스의 중요한 부분이라던지, 바꾸면 안 되는 부분이나 개인정보 등을 무분별하게, 이상한 데이터로 바꾸는 것을 방지한다. 

 

그래서 getter 와 setter를 사용하는데 이는 어떠한 키워드로 정해진 것이 아닌, 메서드의 역할을 말한다.

 

이게 무슨 말이냐면, Class에 연봉에 대한 정보가 있는 Private 변수가 있다고 해보자

    private int annual_income = 0;

 

 

이 연봉 변수를 setter로 먼저 설정해 주자. 메서드의 이름이 set으로 시작하는 게 보이는가?

public void setAnuual_incom(int increase_amount){
        if(increase_amount < 0) return;
        annual_income += increase_amount;
    }

 

인자로 인상된 금액이 들어오면 그만큼 원래 연봉에서 더해주는 메서드이다.

 

 

이제 설정을 해주었으니 getter 로 접근해 보자. 메서드의 이름이 get으로 시작한다.

    public int getAnnual_incom(){
        System.out.println(String.format("%s 님의 연봉은 %d 만원 입니다.",name, annual_income));
        return annual_income;
    }
    
    // 출력: Daniel 님의 연봉은 5000 만원 입니다.

 

 

이렇게 getter을 통해서 말고, 바로 접근을 시도해 보면 어떻게 될까? 

 

annual_income 은 private 접근이라서 에러가 뜬다.

 

 

 

  getter 와 setter를 사용하는 이유는?

 

private 접근 제어자는 해당 Class 에서만 접근이 가능하기에 그 Class 안에 메서드를 만들어서 간접적으로 접근을 하는 것이다.

이를 통해서 보다 안전하게 접근이 가능하다.

 

 

'BE > Basic' 카테고리의 다른 글

[Java] 컬렉션(ArrayList, LinkedList, Queue) # 6  (0) 2024.01.27
[Java] Class - 생성자(Constructor) #4  (0) 2024.01.03
[Java] 여러가지 연산자 #3  (0) 2024.01.01
[Java] 변수와 타입 #2  (0) 2023.12.30
[Java] HelloWorld! #1  (0) 2023.12.28