[주제]
Struct 와 Class 중에 누가 더 빠른가? 혹은 나머지 특징에 대한 각각의 장점과 단점에 대해 알아보자.
[내용]
|
Struct |
Class |
속도 |
빠름(stack memory) |
느림(heap memory) |
인자 전달하는 방식 |
call by value |
call by reference |
메모리 저장 방식 |
stack memory |
heap memory |
상속 유무 |
상속 불가능 |
상속 가능 |
우선 짚고 넘어가야 할 점은 위의 표를 보면 알 수 있겠지만 Struct와 Class는 언제나 어느 한 쪽의 사용이 권장되는 방식이 아닌 각각의 장단점을 갖고 있다는 점이다.
<속도>
Struct를 사용한다면 프로그램의 stack memory에 저장이 되기 때문에 heap memory에 저장되는 class보다 더 빠를 수가 있다.
스택과 힙 메모리의 차이점에 대해서 이 참에 한번 짚어보고 가도록 하자.
|
스택 |
힙 |
메모리 이동 방식 |
메모리의 높은 주소에서 낮은 주소 |
메모리의 낮은 주소에서 높은 주소 |
유연성 |
resize 불가능 |
resize 가능 |
할당 / 해제 |
빠름 |
느림 |
범위 |
지역(local) |
전역(global) |
스택 메모리의 경우에는 함수의 호출과 관계되어 있으며 stack 방식으로 이루어져서 LIFO 의 방식으로 동작을 한다.
반면에 heap 메모리는 프로그래머가 관리할 수 있으며 관리해야 하는 메모리이다.
stack 메모리는 용량이 heap 메모리보다 적다는 특징이 있다는 것까지는 기억해두자.
<인자 전달하는 방식>
스택은 call by value 즉, 약한 참조를 일으키고 class 는 call by reference로 강한 참조이다.
즉, struct를 호출할때 우리들이 해당 인스턴스의 내용을 바꾸더라도 원본 struct는 그대로를 유지하고 class의 경우에는 우리가 해당 내용을 바꾸는 경우에 원본 class또한 바뀐다는 특징을 가지고 있다.
<상속 유무>
struct의 경우에는 상속이 불가능하고 class의 경우에는 상속이 가능하다.
고로 만일 우리가 A라는 struct의 내용을 B라는 struct에 상속시키고 싶다면 따로 struct 인스턴스를 호출해서 해당 내용을 B에 넣는식으로 구현을 해야 한다.