본문 바로가기
프로그래밍/Java

[Java] Java의 접근 제어자의 종류와 특징

by 시간많은백수 2023. 10. 3.
반응형
 

💡접근 제어자란?

접근 제한자(Access Modifier)는 말 그대로 접근을 제한하기 위해 사용됩니다. 여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말합니다. 

어떤 경우에는 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막을 필요가 있습니다. 그리고 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야 되는 경우도 있습니다. 이때 접근 제한자를 사용할 수 있습니다. 

접근 제한자는 public, protected, private와 같이 세 가지 종류가 있습니다.

  • public 접근 제한자: 단어 뜻 그대로 외부 클래스가 자유롭게 사용할 수 있도록 합니다.
  • protected 접근 제한자: 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 합니다.
  • private 접근 제한자: 단어 뜻 그대로 개인적인 것이라 외부에서 사용될 수 없도록 합니다.


위 세 가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가집니다.

📌 public

가장 넓은 범위의 접근 제어자로, 어떤 패키지에서든 접근이 가능합니다. public으로 선언된 클래스, 멤버 변수, 메서드는 어디서든 접근할 수 있습니다.

1
2
3
4
5
6
7
public class MyClass {
    public int myVariable;
    public void myMethod() {
        // 메서드 내용
    }
}
 
cs

 

📌 protected

동일한 패키지 내에서는 public과 동일하게 접근할 수 있으며, 다른 패키지의 서브클래스에서도 접근할 수 있습니다. protected로 선언된 멤버 변수와 메서드는 상속 관계에서 주로 사용됩니다.

1
2
3
4
5
6
7
protected class MyBaseClass {
    protected int myVariable;
    protected void myMethod() {
        // 메서드 내용
    }
}
 
 
cs

 

📌 default (package-private)

아무 접근 제어자도 지정하지 않은 경우를 의미하며, 동일한 패키지 내에서만 접근할 수 있습니다. 패키지 내부에서만 사용되는 클래스, 변수, 메서드를 정의할 때 주로 활용됩니다.

 

1
2
3
4
5
6
7
class MyPackageClass {
    int myVariable;
    void myMethod() {
        // 메서드 내용
    }
}
 
cs

 

 

📌 private

가장 제한적인 접근 제어자로, 동일한 클래스 내에서만 접근할 수 있습니다. 주로 클래스 내부의 멤버 변수와 메서드를 보호하기 위해 사용됩니다.

1
2
3
4
5
6
7
public class MyClass {
    private int myVariable;
    private void myMethod() {
        // 메서드 내용
    }
}
 
cs

 

 

Java의 접근 제어자를 적절히 활용하여 클래스와 멤버의 접근 범위를 제어함으로써 코드의 보안성을 높이고, 다른 개발자들과 협업 시에도 코드의 안전성을 유지할 수 있습니다. 이를 통해 객체 지향 프로그래밍의 캡슐화(Encapsulation) 원칙을 지킬 수 있습니다.

접근 제한 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스
반응형