ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • class 와 struct 에 대해서
    Programming/C++ 2020. 12. 20. 15:48

    강의를 보던 도중에 struct에 function 삽입이 가능하다는 사실을 알았다.

    예전부터 이 사실을 알고는 있었지만 실질적으로 사용을 해본적이 없어서 이번 기회에 여러가지 사용을 해봤는데

    문뜩 class와 struct로 객체를 생성했을 때 드는 퍼포먼스가 궁금해졌다.

     

    테스트는 아래 코드를 기반으로 했다.

    github.com/ParkHyeonJae/TIL/blob/master/Coding/C%26C%2B%2B/src/mordernCpp/mordernCpp/StructVSClass.cpp

     

    ParkHyeonJae/TIL

    Today I Learn : 오늘 배운 내용에 관한 레포. Contribute to ParkHyeonJae/TIL development by creating an account on GitHub.

    github.com

     

     

    밴치마크는 quick-bench.com/

     

    Quick C++ Benchmarks

    Quickly benchmark C++ runtimes

    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
Designed by Tistory.