C#과 Java의 접근 제어자(Access Modifiers)는 비슷한 개념을 가지지만, 일부 차이점이 있습니다. 아래에서 비교해 보겠습니다.
🔹 C#과 Java의 접근 제어자 비교
접근 제어자 | C# | Java | 설명 |
public | ✅ | ✅ | 어디서든 접근 가능 |
private | ✅ | ✅ | 같은 클래스 내에서만 접근 가능 |
protected | ✅ | ✅ | 같은 클래스 + 하위 클래스에서 접근 가능 (Java는 같은 패키지에서도 가능) |
internal | ✅ | ❌ | 같은 어셈블리(프로젝트) 내에서만 접근 가능 |
package-private (default) | ❌ | ✅ | 같은 패키지 내에서만 접근 가능 (default 접근 제어자) |
protected internal | ✅ | ❌ | 같은 어셈블리 또는 하위 클래스에서 접근 가능 |
private protected | ✅ | ❌ | 같은 어셈블리 내의 하위 클래스에서만 접근 가능 |
🔹 차이점 정리
- Java에는 internal, protected internal, private protected가 없음
- C#의 internal은 같은 프로젝트(어셈블리) 내에서만 접근 가능하지만, Java에는 비슷한 개념이 없음.
- Java에서는 protected가 패키지 내에서도 접근 가능하지만, C#에서는 상속 관계에서만 가능.
- Java에는 package-private (default) 접근 제어자가 있음
- Java에서 접근 제어자를 명시하지 않으면 package-private이 기본 적용됨. 즉, 같은 패키지 내에서 접근 가능.
- C#에는 이런 개념이 없으며, 접근 제어자를 지정하지 않으면 private이 기본값.
- 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 모두 비슷한 개념을 가지지만, 접근 범위에 대한 차이가 있으므로 프로젝트에 맞게 선택해야 합니다. 🚀
'프로그래밍' 카테고리의 다른 글
Anemic Model (빈혈 모델)란? (0) | 2025.03.14 |
---|---|
Keep-Alive란? (2) | 2025.03.02 |
자바와 닷넷 비교 - 생성자 (0) | 2025.03.02 |
자바와 닷넷 비교 - static (0) | 2025.03.02 |
자바와 닷넷 비교 - final과 sealed, final과 readonly and const (0) | 2025.03.02 |