C++
: 같은 클래스의 객체는 서로의 private 멤버에 접근할 수 있다
이는 C++에서 private 접근 제어자가 클래스 단위로 동작하기 때문이다
#include <iostream>
using namespace std;
class MyClass
{
private:
int value;
public:
MyClass(int val) : value(val) {}
bool isEqual(const MyClass& other) const
{
return value == other.value; // 같은 클래스의 객체라서 접근 가능
}
};
int main() {
MyClass obj1(10), obj2(10);
cout << obj1.isEqual(obj2); // 출력: 1 (true)
return 0;
}
Java
: 클래스 외부뿐 아니라 다른 객체(심지어 같은 클래스의 인스턴스이더라도)에서도 접근할 수 없다
이는 Java에서 private 접근 제어자가 객체 단위로 동작하기 때문이다
class MyClass {
private int value;
public MyClass(int val) {
value = val;
}
public boolean isEqual(MyClass other) {
// return value == other.value; // 컴파일 에러 발생!
return false; // private 멤버 접근 불가
}
}
public class Main {
public static void main(String[] args) {
MyClass obj1 = new MyClass(10);
MyClass obj2 = new MyClass(10);
System.out.println(obj1.isEqual(obj2)); // 출력: false
}
}
이유
C++에서 성능과 유연성을 강조하다 보니 객체 간의 자유로운 접근을 허용했지만,
이는 잘못된 코드 작성 시 메모리 문제를 야기할 수 있는 위험도 동반한다
Java는 안정성을 더 중요시했기 때문에,
객체 간의 강한 캡슐화를 통해 의도치 않은 접근이나 오류를 예방하려는 설계 의도를 가지고 있다
'IT공부' 카테고리의 다른 글
[ETC] 메모리 원자성과 DB 원자성 (0) | 2025.01.24 |
---|---|
[ETC] 레드 블랙 트리 (0) | 2024.12.19 |
[C++] Placement New (0) | 2024.12.18 |
[ETC] 커널 전역 데이터 구조, 전역 or 프로세스별 커널 오브젝트 (0) | 2024.12.14 |
[ETC] 지수와 로그 역관계 (0) | 2024.12.14 |