JAVA - 접근 제한자(public, private, protected, default)


접근 제한자라?

멤버들은 객체 자신들만의 속성이자 특징이므로 대외적으로 공개되는 것이 좋은 것은 아니다.

OOP에서의 캡슐화와 관련이 있는데, 꼭 필요한 부분만 보여줄 필요가 있는 부분만 보여주는 것이 좋다.

이런 이유로 프로그래머가 객체의 멤버들에게 접근 제한을 걸 수가 있는데 자바에서는 이를 접근 제한자라고 한다.

제한자 종류

  1. public : 모든 접근을 허용
  2. protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
  3. default : 같은 패키지(폴더)에 있는 객체들만 허용
  4. default : 현재 객체 내에서만 허용

접근제한자 사용

  1. 클래스 : public, default
  2. 생성자 : public, protected, default, private
  3. 멤버변수 : public, protected, default, private
  4. 멤버메소드 : public, protected, defualt, private
  5. 지역변수 : 접근 제한자 사용 불가

그냥 클래스는 protected, private을 쓰지 못한다고 생각하면 된다.

위에서 캡슐화에 대해 언급을 했는데, 추가적인 설명을 더 적어놓겠다.

캡슐화란?

항상 은닉화를 전제로 한다. 관련이 있는 데이터 그리고 동작들을 하나로 묶어 요약하고 사용자에게는 내부적인 접근을 허용하지 않는 대신에 사용의 편의성을 제공해준다.

  • 데이터 보호의 장점 : 은닉화를 통해 데이터의 접근을 제어할 수 있다.
  • 유지 보수성의 장점 : 객체에 대한 수정 작업으로 인해 활용도에 문제가 발생한다면 제품 하나에 대한 upgrade가 부담스러울 것이다. 자바에서는 각 기능을 하나의 모듈(부품)처럼 활용하여 객체간의 이식성이 높고 독립적인 면을 유지하는 장점이 있다.
  • 사용자 편의성의 장점 : 리모컨으로 따지면 내부 회로는 알 필요 없이 그냥 사용법만 알고 있으면 된다.
class Variable{
    private int a;  //은닉화
    //캡슐화
    public void setA(int n){
        a = n;
    }
    public int getA(){
        return a;
    }
}
public class MethodTest2 {
    public static void main(String[] args) {
        Variable v = new Variable();   
        //System.out.println(v.a); //호출불가
        v.setA(100);
        System.out.println(v.getA());
    }
}