JAVA - 접근 제한자(public, private, protected, default)
in JAVA on 공부, Java, 접근제한자
접근 제한자라?
멤버들은 객체 자신들만의 속성이자 특징이므로 대외적으로 공개되는 것이 좋은 것은 아니다.
OOP에서의 캡슐화와 관련이 있는데, 꼭 필요한 부분만 보여줄 필요가 있는 부분만 보여주는 것이 좋다.
이런 이유로 프로그래머가 객체의 멤버들에게 접근 제한을 걸 수가 있는데 자바에서는 이를 접근 제한자라고 한다.
제한자 종류
- public : 모든 접근을 허용
- protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
- default : 같은 패키지(폴더)에 있는 객체들만 허용
- default : 현재 객체 내에서만 허용
접근제한자 사용
- 클래스 : public, default
- 생성자 : public, protected, default, private
- 멤버변수 : public, protected, default, private
- 멤버메소드 : public, protected, defualt, private
- 지역변수 : 접근 제한자 사용 불가
그냥 클래스는 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());
}
}