더북(TheBook)

스택이 그렇게 빠르다면 모든 것에 스택을 사용하면 어떨까? 힙이나 가비지 컬렉션이 있는 이유가 무엇일까? 바로 스택은 함수가 동작하는 동안에만 사용할 수 있기 때문이다. 함수가 반환되면 함수의 스택 프레임에 있던 모든 정보가 사라지고 다른 함수가 그 스택 공간을 사용한다. 함수보다 더 오래 살아남아야 하는 객체를 위해 힙이 필요하다.

또한, 스택은 크기가 제한적이다. ‘스택 오버플로’ 웹 사이트의 이름이 이렇게 지어진 이유는 스택을 오버플로하면 애플리케이션이 충돌하기 때문이다. 스택을 배려하려면 스택의 한계를 알고 있어야 한다.

구조체는 경량화된 클래스라고 볼 수 있다. 값 타입이므로 스택에 할당된다. 즉, 구조체 값을 변수에 할당하는 것은 단일 참조가 해당 변수를 가리키는 것이 아니기 때문에 변수의 내용을 복사한다는 것을 의미한다. 복사하는 것은 포인터보다 큰 데이터에 대한 참조를 전달하는 것보다 느리다는 점을 알아야 한다.

구조체 자체가 값 타입이긴 하지만 참조 타입을 포함할 수도 있다. 예를 들어 구조체에 문자열이 들어 있다면 이는 참조 타입 안에 값 타입을 포함할 수 있는 것과 비슷하게 값 타입 내에 있는 참조 타입이 된다. 이어지는 그림들로 이를 자세히 설명하겠다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.