728x90
반응형

C++에서 구조체(struct)를 다양하게 선언하는 방법

  • C++에서는 struct를 매우 유연하게 선언하고 초기화할 수 있습니다.
  • C 스타일의 전통적인 선언 방식부터 C++11 이후 도입된 auto, uniform initialization 문법까지 다양한 표현이 가능합니다.
  • 이 글에서는 struct OtherData를 다양한 방식으로 선언하고 초기화하는 방법을 하나씩 살펴보겠습니다.

1. 기본 구조체 선언 및 초기화

  • 가장 전통적인 방식으로, 선언과 동시에 초기화하는 방법입니다.

  • cpp

      struct OtherData {
          int a;
          float b;
          char msg[32];
      } otherData = {10, 5.5f, "Test OtherData"}; // aggregate initialization
    


2. typedef를 사용한 선언과 초기화

  • typedef를 통해 구조체 타입에 별칭을 부여한 후 선언 및 초기화할 수도 있습니다.

  • cpp

      typedef struct {
          int a;
          float b;
          char msg[32];
      } OtherData;
      
      OtherData otherData = {10, 5.5f, "Test OtherData"};
    


3. 익명 구조체를 auto와 함께 사용 (C++11)

  • 구조체 타입을 별도로 정의하지 않고 auto를 사용하여 선언과 동시에 초기화할 수도 있습니다.

  • cpp

      auto otherData = struct {
          int a;
          float b;
          char msg[32];
      } {10, 5.5f, "Test OtherData"};
    


4. 생성자 스타일 초기화 (C++11)

  • 구조체 타입 이름을 이용해 객체 생성 시 생성자 형태로 초기화하는 방식입니다.

  • cpp

      struct OtherData {
          int a;
          float b;
          char msg[32];
      } otherData = OtherData{10, 5.5f, "Test OtherData"};
    


5. 중괄호 초기화(Uniform Initialization) (C++11)

  • 중괄호{}를 이용하여 더 일관된 초기화를 제공합니다.

  • cpp

      struct OtherData {
          int a;
          float b;
          char msg[32];
      } otherData {10, 5.5f, "Test OtherData"};
    


6. 구조체 초기화(constexpr) (C++11)

  • constexpr을 사용하면 컴파일 타임 상수를 가질 수도 있습니다.

  • cpp

      struct OtherData {
          int a;
          float b;
          char msg[32];
      } constexpr otherData = {10, 5.5f, "Test OtherData"};
    


7. static 구조체 초기화

  • 전역 객체처럼 정적으로 생성하는 방식입니다.

  • cpp

      static struct OtherData {
          int a;
          float b;
          char msg[32];
      } otherData = {10, 5.5f, "Test OtherData"};
    


8. auto 키워드를 통한 타입 유추 초기화 (C++11)

  • 구조체 타입을 명시하지 않고 auto를 통해 자동으로 타입을 유추하게 할 수도 있습니다.

  • cpp

      auto otherData = OtherData{10, 5.5f, "Test OtherData"};
    


9. using을 통한 별칭(alias) 선언 후 초기화 (C++11)

  • using을 활용해 별칭을 지정한 후 초기화할 수 있습니다.

  • cpp

      using OtherData = struct { int a; float b; char msg[32]; };
      OtherData otherData = {10, 5.5f, "Test OtherData"};
    


10. 포인터로 선언 및 동적 할당 초기화 (C++11)

  • 동적 메모리 할당을 통해 포인터로 구조체를 생성하는 방법도 가능합니다.

  • cpp

      auto otherData = new OtherData{10, 5.5f, "Test OtherData"};
    


정리

  • C++에서는 동일한 구조체 선언과 초기화도 상황에 맞게 여러 방식으로 표현할 수 있습니다.
  • 코드 가독성, 라이프사이클, 상수화 여부, 동적 할당 필요성 등에 따라 다양한 방법을 조합하여 사용하면 더욱 유연하고 가독성 높은 코드를 작성할 수 있습니다.
  • 필요하다면 std::string, std::array 등의 표준 라이브러리 타입을 혼합해서 더욱 현대적인 방식으로 구조체를 구성해볼 수도 있습니다.



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

+ Recent posts