
자바 프로그래밍을 하다 보면 특정 변수나 메서드 앞에 private, public 등을 붙일 때가 있다. 나 또한 어렴풋이 의미를 알고 있긴 하지만 정확한 의미와 종류, 차이에 대해선 설명할 수 없었다. 그래서 이번엔 자바 접근 제한자에 대해 정리를 해보려고 한다.
자바에는 총 4가지 접근 제한자가 존재한다. private, public, protected, default 가 그것이다. 각각의 접근 제한자가 어떤 역할을 하는지와 언제 사용하는지를 상세히 설명해보도록 하겠다.
private 접근 제한자는 오직 선언된 클래스 내에서만 접근할 수 있다.
public class Example {
private int value; // 클래스 내부에서만 접근 가능
private void doSomething() {
// 클래스 내부에서만 호출 가능
}
}
접근 제한자를 명시하지 않은 경우 기본 접근 수준으로, 같은 패키지 내에서만 접근할 수 있다.
class Example {
int value; // 같은 패키지 내에서만 접근 가능
void doSomething() {
// 같은 패키지 내에서만 호출 가능
}
}
protected 접근 제한자는 같은 패키지 내의 클래스 또는 다른 패키지에 있는 하위 클래스에서 접근할 수 있다.
public class BaseClass {
protected int value; // 같은 패키지 또는 하위 클래스에서 접근 가능
protected void doSomething() {
// 같은 패키지 또는 하위 클래스에서 호출 가능
}
}
public class SubClass extends BaseClass {
public void useBaseClass() {
value = 10; // 상위 클래스의 protected 멤버에 접근 가능
doSomething(); // 상위 클래스의 protected 메서드 호출 가능
}
}
public 접근 제한자는 모든 클래스에서 접근할 수 있다.
public class Example {
public int value; // 모든 클래스에서 접근 가능
public void doSomething() {
// 모든 클래스에서 호출 가능
}
}
| 접근 제한자 | 같은 클래스 | 같은 패키지 | 하위 클래스(다른 패키지) | 모든 클래스 |
|---|---|---|---|---|
| private | O | X | X | X |
| default | O | O | X | X |
| protected | O | O | O | X |
| public | O | O | O | O |
접근 제한자를 적절히 사용하면 코드의 캡슐화, 정보 은닉, 모듈화, 확장성을 높일 수 있다. 각 접근 제한자의 특성과 용도를 이해하고 상황에 맞게 사용하는 것이 중요하니 꼭 기억해두자!