C++에서 클래스의 구조체

Namita Chaudhary 2023년10월12일
  1. C++에서 클래스의 구조체
  2. C++의 구조체
  3. C++의 클래스
  4. C++의 클래스에서 구조체 사용
  5. 결론
C++에서 클래스의 구조체

유사한 데이터 유형의 그룹을 저장해야 할 때마다 배열을 사용합니다. 그러나 유사하지 않은 유형의 데이터 그룹을 저장해야 하는 상황이 발생하면 구조 및 클래스 데이터 유형을 사용합니다.

이 글에서는 구조체와 클래스, 그리고 클래스 내부에서 구조체를 사용하는 방법에 대해 설명합니다.

C++에서 클래스의 구조체

구조는 유사하지 않은 유형의 데이터를 저장하는 데 사용되는 사용자 정의 데이터 유형입니다. struct 키워드가 이를 선언합니다.

반면에 클래스는 유사하지 않은 유형의 데이터를 저장하기 위한 사용자 정의 데이터 유형이기도 합니다. class 키워드는 이를 나타냅니다.

그러나 그들 사이의 주요 차이점은 클래스는 해당 멤버의 구현 세부 정보를 숨기고 기본적으로 클래스의 모든 멤버를 비공개로 만드는 반면 구조는 멤버의 구현 세부 정보를 숨기지 않으며 기본적으로 모든 멤버를 공개로 만든다는 것이다.

이제 C++에서 구조체와 클래스를 개별적으로 사용하는 방법을 이해합시다.

C++의 구조체

우리는 struct 키워드를 사용하여 C++에서 구조를 선언한 다음 모든 데이터 멤버를 선언합니다. 더 잘 이해하기 위해 코드 예제를 살펴보겠습니다.

#include <iostream>
using namespace std;
struct X {
  int a;
};
int main() {
  X x;
  x.a = 10;
  cout << x.a;
}

출력:

10

위의 코드 예제에서 우리는 구조체 X를 선언하고 그 안에 변수 a를 선언합니다. 이제 우리는 이 구조의 인스턴스를 만들고 메인 메소드에서 이 인스턴스 x에 의해 변수 a에 액세스하려고 시도합니다. 구조는 기본적으로 모든 구성원이 공개이므로 구조에 쉽게 액세스하고 값을 변경할 수 있습니다.

C++의 클래스

C++에서 class 키워드로 클래스를 선언한 다음 클래스의 데이터 멤버를 선언합니다. 코드의 도움으로 C++에서 클래스의 사용법을 이해합시다.

#include <iostream>
using namespace std;
class X {
  int a;
};
int main() {
  X x;
  x.a = 10;
  cout << x.a;
}

출력:

./ex.cpp: In function 'int main)':
./ex.cpp:23:9: error: 'int X::a' is private
     int a;
         ^
./ex.cpp:28:7: error: within this context
     x.a = 10;
       ^
./ex.cpp:23:9: error: 'int X::a' is private
     int a;
         ^
./ex.cpp:29:13: error: within this context
     cout<<x.a;
             ^

위의 코드 예제에서 우리는 클래스를 만들고 그 안에 데이터 멤버를 변수 a로 선언했습니다. 그러나 클래스의 멤버는 기본적으로 private이기 때문에 main 함수 내에서 이 데이터 멤버에 액세스할 수 없습니다.

따라서 액세스할 수 없으며 오류가 발생합니다.

C++의 클래스에서 구조체 사용

구조체와 클래스를 개별적으로 만드는 방법을 살펴보았습니다. 이제 C++에서 클래스 내부에서 구조체를 사용하는 방법을 이해하겠습니다.

코드 예제를 통해 이 개념을 이해할 것입니다.

#include <iostream>
using namespace std;
class X {
 public:
  struct T {
    int a;
  };
};
int main() {
  X x;
  x.a = 10;
  cout << x.a;
}

출력:

./ex.cpp: In function 'int main)':
./ex.cpp:15:7: error: 'class X' has no member named 'a'
     x.a = 10;
       ^
./ex.cpp:16:13: error: 'class X' has no member named 'a'
     cout<<x.a;
             ^

보시다시피 위 코드는 주 메서드에서 구조 변수 a에 액세스하려고 할 때 오류를 발생시킵니다. 이는 클래스의 인스턴스만 만들고 클래스의 인스턴스로 변수를 호출했기 때문입니다.

우리는 구조의 인스턴스도 만들지 않았습니다. 따라서 프로그램은 변수 a를 결정하지 않는 오류를 발생시킵니다.

이제 이 오류를 극복하는 방법에 대해 논의할 것입니다. 구조체 및 클래스 예제에서 보았듯이 해당 멤버에 액세스하기 전에 구조체 및 클래스의 인스턴스를 만들어야 합니다.

클래스 내부에서 구조체를 사용할 때도 동일한 개념이 적용됩니다. 코드 예제의 도움으로 이것을 이해합시다.

#include <iostream>
using namespace std;
class X {
 public:
  struct T {
    int a;
  };
  T t;
};
int main() {
  X x;
  x.t.a = 10;
  cout << x.t.a;
}

출력:

10

따라서 우리는 이제 클래스 내부에 구조의 인스턴스를 만들고 클래스와 구조체의 인스턴스 모두의 도움으로 구조체 변수 a에 액세스합니다.

결론

이 기사에서 우리는 C++의 구조와 클래스의 사용법을 보았습니다. 둘 다 사용자 정의 데이터 유형입니다. 그러나 이들 사이의 유일한 차이점은 클래스의 멤버는 기본적으로 private이고 구조체의 멤버는 기본적으로 public이라는 것입니다.

그 후에 클래스에서 구조체를 사용하는 동안 일반적으로 발생하는 문제에 대해서도 논의했습니다.

관련 문장 - C++ Struct