Java에서는 네 가지 접근 제어자(Access Modifier)를 사용하여 클래스, 메서드, 변수 등의 접근 범위를 제한할 수 있습니다. 이들은 public, private, protected 그리고 기본 접근 제어자(아무런 키워드가 없는 경우)입니다.
public: public 키워드가 붙은 멤버는 어떤 클래스에서든지 접근이 가능합니다. 즉, public 접근 제어자는 멤버를 외부에 공개하여 어떤 클래스든지 접근할 수 있게 합니다.
private: private 키워드가 붙은 멤버는 해당 클래스 내에서만 접근이 가능합니다. 즉, private 접근 제어자는 멤버를 외부로부터 감추고 해당 클래스 내에서만 접근할 수 있게 합니다.
protected: protected 키워드가 붙은 멤버는 같은 패키지 내의 다른 클래스 또는 서브 클래스에서 접근이 가능합니다. 즉, protected 접근 제어자는 상속 관계의 클래스나 같은 패키지에 있는 클래스로만 접근을 허용합니다.
default(기본 접근 제어자): 아무런 접근 제어자 키워드도 붙지 않은 멤버는 기본 접근 제어자를 가지며, 같은 패키지 내에서만 접근이 가능합니다.
이 네 가지 접근 제어자를 통해, 클래스의 내부 데이터를 캡슐화하고 보호하는 데 필요한 접근 범위를 설정할 수 있습니다. 이는 객체 지향 프로그래밍의 핵심 원칙 중 하나인 캡슐화를 지원하는 데 중요한 역할을 합니다.
// 패키지 com.example.demo;
package com.example.demo;
public class MyClass {
public int publicVar = 1; // public 접근 제어자
private int privateVar = 2; // private 접근 제어자
protected int protectedVar = 3; // protected 접근 제어자
int defaultVar = 4; // default (패키지-private) 접근 제어자
// public 메서드
public void publicMethod() {
System.out.println("This is a public method");
}
// private 메서드
private void privateMethod() {
System.out.println("This is a private method");
}
// protected 메서드
protected void protectedMethod() {
System.out.println("This is a protected method");
}
// default 메서드
void defaultMethod() {
System.out.println("This is a default method");
}
}
위의 클래스에서, publicMethod
와 publicVar
는 다른 패키지의 어떤 클래스에서도 접근이 가능합니다. privateMethod
와 privateVar
는 MyClass
내에서만 접근이 가능하며, protectedMethod
와 protectedVar
는 같은 패키지 내의 다른 클래스 또는 서브 클래스에서 접근이 가능합니다. 마지막으로, defaultMethod
와 defaultVar
는 같은 패키지 내의 클래스에서만 접근이 가능합니다.