[TIL] 10.31

Junyoung_Hong·2023년 10월 31일
0

TIL_10월

목록 보기
20/20
post-thumbnail

1. 구조체(Struct)와 클래스(Class)의 차이 (메모리적 관점)

예전에 구조체와 클래스의 차이에 대해서 포스팅한적이 있지만, 메모리의 관점에 대해 좀 더 알아보고자 한다.

  • 구조체(Struct): 값 형식이므로 구조체의 인스턴스는 스택 메모리에 할당된다. 이는 일반적으로 메모리 할당과 해제가 빠르지만, 스택의 크기가 제한되어 있기 때문에 큰 데이터를 저장하기에는 적합하지 않을 수 있다.
  • 클래스(Class): 참조 형식이므로 클래스의 인스턴스는 힙 메모리에 할당된다. 힙은 스택보다 훨씬 더 큰 메모리 영역을 가지고 있지만, 메모리 할당과 해제가 상대적으로 느리고, 메모리 누수(memory leak)의 위험이 있다. 메모리 누수는 프로그램이 힙에 할당된 메모리를 해제하지 않고, 그 메모리에 대한 참조를 잃어버려 계속해서 메모리를 소비하는 현상을 말한다.

이러한 차이점 때문에 구조체와 클래스는 서로 다른 시나리오에 더 적합할 수 있다. 예를 들어, 작고 변경되지 않는 데이터를 다룰 때는 구조체를 사용하는 것이 효율적일 수 있고, 크고 복잡한 객체나 상태를 공유해야 하는 경우에는 클래스를 사용하는 것이 좋을 수 있다.

이 부분을 비유를 통해 설명을 다시 하자면 다음과 같다.

1-1. 구조체(Struct) - 아파트

아파트를 구매하면 그 공간은 완전히 내것이 된다. 아파트 내부를 어떻게 꾸미든, 어떤 물건을 넣든 전혀 문제되지 않는다. 또한, 아파트의 상태는 복사되어 다른 아파트에 영향을 주지 않는다.

이런 부분이 구조체와 유사하다. 구조체 인스턴스는 메모리의 특정 영역(주로 스택)에 할당되며, 그 공간은 완전히 그 인스턴스를 위한 것이다. 구조체 인스턴스를 다른 변수에 할당하면, 메모리의 새로운 영역에 인스턴스의 복사본이 생성된다. 각 인스턴스는 독립적이며 서로 영향을 주지 않는다.

1-2. 클래스(Class) - 호텔

호텔의 객실을 사용할 때, 우리는 그 객실을 소유하는 것이 아니라 사용하는 것이다. 객실에 있는 물건들은 모든 손님들과 공유된다. 만약 이전 손님이 물건을 옮겨놓았다면, 내가 방에 들어갔을 때 그 상태 그대로이다.

클래스도 이와 비슷하다. 클래스의 인스턴스는 메모리의 특정 영역(주로 힙)에 할당되지만, 인스턴스 자체를 다른 변수에 할당하는 대신, 그 인스턴스의 주소를 할당한다. 이 주소를 통해 여러 변수가 동일한 메모리 영역(인스턴스)을 공유할 수 있다. 그래서 한 변수를 통해 인스턴스를 수정하면, 같은 인스턴스를 참조하는 다른 변수들도 그 변경사항을 수 있다.

profile
iOS 개발자를 향해 성장 중

0개의 댓글