예전에 구조체와 클래스의 차이에 대해서 포스팅한적이 있지만, 메모리의 관점에 대해 좀 더 알아보고자 한다.
이러한 차이점 때문에 구조체와 클래스는 서로 다른 시나리오에 더 적합할 수 있다. 예를 들어, 작고 변경되지 않는 데이터를 다룰 때는 구조체를 사용하는 것이 효율적일 수 있고, 크고 복잡한 객체나 상태를 공유해야 하는 경우에는 클래스를 사용하는 것이 좋을 수 있다.
이 부분을 비유를 통해 설명을 다시 하자면 다음과 같다.
아파트를 구매하면 그 공간은 완전히 내것이 된다. 아파트 내부를 어떻게 꾸미든, 어떤 물건을 넣든 전혀 문제되지 않는다. 또한, 아파트의 상태는 복사되어 다른 아파트에 영향을 주지 않는다.
이런 부분이 구조체와 유사하다. 구조체 인스턴스는 메모리의 특정 영역(주로 스택)에 할당되며, 그 공간은 완전히 그 인스턴스를 위한 것이다. 구조체 인스턴스를 다른 변수에 할당하면, 메모리의 새로운 영역에 인스턴스의 복사본이 생성된다. 각 인스턴스는 독립적이며 서로 영향을 주지 않는다.
호텔의 객실을 사용할 때, 우리는 그 객실을 소유하는 것이 아니라 사용하는 것이다. 객실에 있는 물건들은 모든 손님들과 공유된다. 만약 이전 손님이 물건을 옮겨놓았다면, 내가 방에 들어갔을 때 그 상태 그대로이다.
클래스도 이와 비슷하다. 클래스의 인스턴스는 메모리의 특정 영역(주로 힙)에 할당되지만, 인스턴스 자체를 다른 변수에 할당하는 대신, 그 인스턴스의 주소를 할당한다. 이 주소를 통해 여러 변수가 동일한 메모리 영역(인스턴스)을 공유할 수 있다. 그래서 한 변수를 통해 인스턴스를 수정하면, 같은 인스턴스를 참조하는 다른 변수들도 그 변경사항을 볼 수 있다.