IT공부

[C++] 접근 제어자 private 자바와의 차이점

shine94 2024. 12. 29. 02:39

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는 안정성을 더 중요시했기 때문에,

            객체 간의 강한 캡슐화를 통해 의도치 않은 접근이나 오류를 예방하려는 설계 의도를 가지고 있다