CS

면접에서 당황했던 질문, 클래스 안 구조체는 어디에 저장되나요?

GGShin 2025. 6. 22. 19:19

예전에 받은 인터뷰 질문 중에, class 안에 정의된 structure는 stack과 heap 중에 어디에 적재되나요? 그리고 structure 안에 정의된 class는 어디에 적재 되나요? 라는 질문을 받은 적이 있었습니다.

 

너무나도 기본적인 수준의 지식만 가지고 있던 저에게는 꽤나 당황스러웠던 질문이었습니다. Class는 참조 타입이니까 heap, structure는 값타입이니까 stack, 이 정도만 알고 있었으니까요. 답이 너무 궁금해서 인터뷰가 끝나고 돌아오는 길에 바로 자료들을 이리 저리 찾아보았던 기억이 납니다. 덕분에 값들의 저장위치에 대해 자세히 알아보는 계기가 되었고, 그때 알게 된 내용들을 간단하게 정리해보려 합니다.

 

먼저, "값 타입은 stack에 참조 타입은 heap에 저장된다" 라는 말은 반은 맞고 반은 틀리다고 할 수 있습니다. 사실 해당 변수가 어떤 타입이냐도 중요하지만, 어디에서 선언되어 있는 지 어떠한 변수인지도 영향을 주게 됩니다. 

 

1. 지역 변수 (Local variables)

메서드의 파라미터로 전달되는 값들이나 메서드 내에서 정의된 변수들은 보통 stack에 저장된다고 합니다.

그럼 메서드 내에 정의된 참조 타입 변수도 마찬가지로 stack에 저장이 될까요?

 

네 맞습니다.

메서드의 파라미터나 내부에 정의된 변수들, 소위 "지역변수(Local variable)" 이라고 불리는 변수들은 타입에 관계 없이 모두 stack에 저장됩니다. 하지만, 참조 타입 변수의 값은 객체 자체가 아니라 항상 '참조(메모리 주소)' 이라는 것을 기억해야 합니다. 실제 값은 heap에 저장되어 있습니다!

 

2. 인스턴스 변수 (Instance variables)

값 타입의 인스턴스 변수들은 선언된 곳이 값 타입인지 참조 타입인지에 따라 다릅니다. 만약에, integer 변수가 structure 내에 선언되어 있다면, 해당 integer 변수는 stack에 저장됩니다. 반면, class 내에 선언된 integer 변수라면 heap에 저장됩니다. 

 

3. 정적 변수 (Static variables)

Static 변수들은 타입과 무관하게 모두 heap에 저장됩니다.

 

이렇게 간단하게 제가 알게 된 내용을 정리해 보았습니다.

결국 어떤 변수냐, 어디에 선언되어 있느냐에 따라서 값 타입이어도 heap에 저장될 수 있으며 참조 타입이어도 reference로 stack에 저장될 수 있다는 것을 알 수 있습니다. 

사실 이것도 좀 더 깊이 들어가면 또 예외가 있다고는 하더라구요. 그렇지만 이제는  더 이상 value type은 stack, referece type은 heap 이렇게 단순하게만 생각해서는 안되겠다는 것을 알 수 있었습니다. 

 

 

반응형