해당 멤버(변수, 메서드 등)는 모든 클래스에서 접근 가능
다른 패키지의 클래스에서도 접근 가능
주로 외부에서 해당 클래스의 인스턴스를 생성하거나 메서드를 호출할 때 사용됨
✔ 예제1
public class MyClass { public void publicMethod() { System.out.println("This is a public method"); } } public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); // MyClass의 객체 생성 obj.publicMethod(); // publicMethod 호출 // 출력: This is a public method } }
public class MyClass는 다른 클래스에서 MyClass에 대한 객체를 생성하고 해당 클래스의 메서드를 호출할 수 있다.
동일한 패키지 내의 클래스 또는 해당 클래스를 상속받은 하위 클래스에서만 접근 가능
외부 패키지에서는 접근할 수 없지만, 상속 관계에 있는 클래스에서는 접근이 가능
주로 상속 관계에서 부모 클래스의 멤버를 자식 클래스에서 사용할 때 사용됨
✔ 예제1
ProtectedExample.javaOtherClass.javapackage example; public class ProtectedExample { protected int protectedVar; // 보호 변수 protected void setProtectedVar(int value) { // protectedVar의 값을 설정하는 메서드 protectedVar = value; } }
package otherpackage; import example.ProtectedExample; public class OtherClass { public static void main(String[] args) { ProtectedExample obj = new ProtectedExample(); // 다른 패키지에 속한 클래스에서는 protectedVar에 직접 접근할 수 없음 // obj.protectedVar = 10; //에러 발생 // 하지만 protectedVar를 설정하는 메서드를 사용하여 값을 설정할 수 있음 obj.setProtectedVar(10); } }
protected int protectedVar는 같은 패키지 내의 클래스나 해당 클래스를 상속받은 하위 클래스에서는 접근 가능하지만, 외부 패키지에서는 접근할 수 없다.
동일한 패키지 내에서만 접근 가능
접근 제한자를 명시하지 않으면 기본적으로 적용됨
패키지 내의 다른 클래스들은 이 멤버에 접근 가능
✔ 예제1
package example; class DefaultExample { int defaultVar; / 아무것도 명시하지 않은 경우의 변수 (패키지 내에서 접근 가능) DefaultExample() { // 생성자 defaultVar = 3; } // 아무것도 명시하지 않은 경우의 메서드 (패키지 내에서 접근 가능) void defaultMethod() { System.out.println("This is a default method"); } }
int defaultVar는 같은 패키지 내의 다른 클래스에서는 접근할 수 있지만, 외부 패키지에서는 접근할 수 없다.
✔ 예제2
AnotherClass.javaOtherClass.javapackage example; public class AnotherClass { public static void main(String[] args) { DefaultExample obj = new DefaultExample(); // 같은 패키지 내의 클래스에서는 defaultVar에 접근 가능 System.out.println("Default variable: " + obj.defaultVar); obj.defaultMethod(); // 출력: This is a default method } }
package otherpackage; import example.DefaultExample; public class OtherClass { public static void main(String[] args) { DefaultExample obj = new DefaultExample(); // 다른 패키지에 속한 클래스에서는 defaultVar에 접근할 수 없음 // System.out.println("Default variable: " + obj.defaultVar); // 에러 발생 // obj.defaultMethod(); // 에러 발생 } }
같은 패키지 내에 있는 클래스인 AnotherClass에서는 defaultVar에 접근할 수 있지만, 다른 패키지에 있는 클래스인 OtherClass에서는 접근할 수 없다.
해당 클래스 내에서만 접근 가능
외부 클래스나 상속 관계에 있는 클래스에서도 접근 불가
주로 해당 클래스의 내부 동작을 구현하는 데 사용됨
✔ 예제1
package example; public class PrivateExample { private int privateVar; // 비공개 변수 private PrivateExample() { // 생성자 privateVar = 4; } private void privateMethod() { // 비공개 메서드 System.out.println("This is a private method"); } // 비공개 변수에 접근하여 값을 출력하는 메서드 public void printPrivateVar() { // 같은 클래스 내의 다른 메서드이므로 privateVar에 접근 가능 System.out.println("Private variable: " + privateVar); } // 외부에서 비공개 메서드 호출을 위한 공개 메서드 public void callPrivateMethod() { // 같은 클래스 내의 다른 메서드인 privateMethod() 호출 privateMethod(); } public static void main(String[] args) { // PrivateExample 클래스의 객체 생성 PrivateExample obj = new PrivateExample(); // 비공개 변수에 접근하여 값을 출력하는 메서드 호출 obj.printPrivateVar(); // 출력: Private variable: 4 // 비공개 메서드 호출 obj.callPrivateMethod(); // 출력: This is a private method } }
private int privateVar는 해당 클래스 내부의 다른 메서드들에서만 접근 가능