프로그래밍

자바와 닷넷 비교 - 접근제어자

Jinwookoh 2025. 3. 2. 20:20

C#과 Java의 접근 제어자(Access Modifiers)는 비슷한 개념을 가지지만, 일부 차이점이 있습니다. 아래에서 비교해 보겠습니다.


🔹 C#과 Java의 접근 제어자 비교

접근 제어자  C# Java  설명
public 어디서든 접근 가능
private 같은 클래스 내에서만 접근 가능
protected 같은 클래스 + 하위 클래스에서 접근 가능 (Java는 같은 패키지에서도 가능)
internal 같은 어셈블리(프로젝트) 내에서만 접근 가능
package-private (default) 같은 패키지 내에서만 접근 가능 (default 접근 제어자)
protected internal 같은 어셈블리 또는 하위 클래스에서 접근 가능
private protected 같은 어셈블리 내의 하위 클래스에서만 접근 가능

🔹 차이점 정리

  1. Java에는 internal, protected internal, private protected가 없음
    • C#의 internal은 같은 프로젝트(어셈블리) 내에서만 접근 가능하지만, Java에는 비슷한 개념이 없음.
    • Java에서는 protected가 패키지 내에서도 접근 가능하지만, C#에서는 상속 관계에서만 가능.
  2. Java에는 package-private (default) 접근 제어자가 있음
    • Java에서 접근 제어자를 명시하지 않으면 package-private이 기본 적용됨. 즉, 같은 패키지 내에서 접근 가능.
    • C#에는 이런 개념이 없으며, 접근 제어자를 지정하지 않으면 private이 기본값.
  3. C#은 private protected를 제공
    • private protected는 같은 어셈블리 내의 하위 클래스에서만 접근 가능.
    • Java에는 이와 동일한 접근 제어자가 없음.

🔹 코드 예제

✅ C# 접근 제어자 예제

public class Parent
{
    private int privateVar = 1;      // 같은 클래스 내에서만 접근 가능
    protected int protectedVar = 2;  // 같은 클래스 + 하위 클래스에서 접근 가능
    internal int internalVar = 3;    // 같은 어셈블리(프로젝트)에서 접근 가능
    protected internal int protIntVar = 4; // 같은 어셈블리 또는 하위 클래스에서 접근 가능
    private protected int privProtVar = 5; // 같은 어셈블리 내의 하위 클래스에서만 접근 가능
}

✅ Java 접근 제어자 예제

public class Parent {
    private int privateVar = 1;      // 같은 클래스 내에서만 접근 가능
    protected int protectedVar = 2;  // 같은 클래스 + 같은 패키지 + 하위 클래스에서 접근 가능
    int packagePrivateVar = 3;       // 같은 패키지 내에서 접근 가능 (default)
    public int publicVar = 4;        // 어디서든 접근 가능
}

🔹 정리

  • C#은 어셈블리(프로젝트) 개념을 이용한 internal 접근 제어자가 있음.
  • Java는 패키지 개념을 이용한 package-private 접근 제어자가 있음.
  • C#은 더 세분화된 접근 제어자(protected internal, private protected)를 제공.

C#과 Java 모두 비슷한 개념을 가지지만, 접근 범위에 대한 차이가 있으므로 프로젝트에 맞게 선택해야 합니다. 🚀