-
class 와 struct 에 대해서Programming/C++ 2020. 12. 20. 15:48
강의를 보던 도중에 struct에 function 삽입이 가능하다는 사실을 알았다.
예전부터 이 사실을 알고는 있었지만 실질적으로 사용을 해본적이 없어서 이번 기회에 여러가지 사용을 해봤는데
문뜩 class와 struct로 객체를 생성했을 때 드는 퍼포먼스가 궁금해졌다.
테스트는 아래 코드를 기반으로 했다.
밴치마크는 quick-bench.com/
첫번째 테스트는 struct와 class 둘다 생성자, 함수, 변수를 넣고 테스트를 해봤다.
#include <benchmark/benchmark.h> #include <iostream> /// <summary> /// struct 에서는 default 접근이 public이기 때문에 따로 접근제어를 하지 않아도 접근이 가능하다. /// 하지만 class는 struct와는 반대로 default가 private라서 바로 접근이 불가능하고 public 으로 해줘야만 접근이 가능하다. /// /// struct에서도 function을 삽입할 수 있다. /// 그리고 Constructor와 Destructor 둘다 사용이 가능하다. /// </summary> struct stPerson { void SetAge(int age) { this->age = age; } int GetAge() { return age; } void SetName(const char const * name) { this->name = name; } const char* GetName() { return name; } void Print(); stPerson() { name = "nameless"; age = 0; } ~stPerson() { } private: const char* name; int age; }; void stPerson::Print() { std::cout << GetName() << " : " << GetAge() << std::endl; } class clPerson { public: void SetAge(int age) { this->age = age; } int GetAge() { return age; } void SetName(const char const* name) { this->name = name; } const char* GetName() { return name; } void Print(); clPerson() { name = "nameless"; age = 0; } ~clPerson() { } private: const char* name; int age; }; void clPerson::Print() { std::cout << GetName() << " : " << GetAge() << std::endl; } static void classTEST(benchmark::State& state) { for (auto _ : state) { clPerson person; } } BENCHMARK(classTEST); static void structTEST(benchmark::State& state) { for (auto _ : state) { stPerson stperson; } } BENCHMARK(structTEST); BENCHMARK_MAIN();
결과는 둘 다 비슷한 성능을 보였다.
다음으로 class랑 struct 둘다 생성자랑 함수를 제외하고 변수만 남겨둔 채로 다시 테스트를 해봤다.
그 결과 놀랍게도 별 차이가 없었다..(?)
개인적으로 struct가 속도 면에서 더 빠를 것으로 예상했지만 인터넷에 추가로 찾아봐도 그렇고 성능 적으로 보면(위의 경우일때) 큰 차이는 없다고 한다.
더 공부를 해야될 것 같다..
'Programming > C++' 카테고리의 다른 글
[C/C++] 특정 값으로 배열 초기화 방법 (0) 2021.01.20