또한 객체 생성을 못하게 하거나 필드나 메서드를 사용하지 못하도록 막아야 하는 경우도 있다.
이때 접근 제한자 키워드를 사용해 제한할 수 있다.
접근 제한자의 종류에는 public, protected, default, private 접근 제한자가 존재한다.
접근 제한자 종류
public
외부 패키지에 존재하는 클래스들이 자유롭게 사용할 수 있다.
같은 패키지내에서나 다른 패키지에서 자유롭게 접근할 수 있다.
라이브러리 같은 외부 개발자들이 사용할 수 있도록 개발한다면 public 접근 제한을 사용 해야한다.
// 사용예시
public class Test { ... }
protected
같은 패키지 또는 자식 클래스에서 사용할 수 있다.
패키지가 다르더라도 protected 접근 제한자를 사용한 부모클래스를 상속받은 자식클래스는
public 접근 제한자처럼 사용할 수 있다.
접근 가능한 범위는 아래와 같다.
1. protected 접근 제한자를 사용한 클래스의 멤버
2. protected 접근 제한자를 사용한 멤버와 같은 패키지
3. protected 접근 제한자 클래스를 상속받은 자식 클래스
package com.test;
// protected 멤버 변수를 가지는 A 클래스
public class A {
protected String test = "다른 패키지에 속한 자식 클래스까지 접근 허용";
}
// A 클래스의 자식클래스
package co.tes;
import com.test.A;
public class B extends A {
public static void main(String[] args) {
A a = new A();
System.out.println(a.test); // 다른 패키지에 속하는 자식 클래스까지 허용
}
}
default
같은 패키지에 존재하는 클래스들만 접근할 수 있다.
default 접근 제한자는 클래스나 멤버 앞에 명시하지 않는다.
따로 접근 제한자 키워드를 적지 않으며 접근 제한자가 지정되지 않으면 default 접근 제한자가 된다.
default 접근 제한자는 같은 클래스의 멤버나 같은 패키지에 속하는 멤버에서만 접근할 수 있다.
package com.test;
public class A {
String test = "같은 패키지 또는 같은 클래스에서 접근 허용";
}
private
같은 클래스내에서만 접근 가능하다.
보통 public 접근제한자를 가진 클래스에 외부에서 접근할 수 없도록 멤버변수를 private 접근 제한자를 많이 사용한다.
public class PrivateTest {
private String test = "같은 클래스만 접근 허용";
private String testMethod() {
return this.test;
}
}