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는 같은 패키지 내의 클래스에서만 접근이 가능합니다.