C++

[C++ 2-3] 구조체

KimKyao 2024. 9. 24. 21:46
#include <iostream>
#include <cstring>

using namespace std;

int main() {
    // 구조체 : 다른 데이터형이 허용되는 데이터의 집합
    // df) 배열 : 같은 데이터혈의 집합

    /*
    축구선수
    string name;
    string position;
    int height;
    int weight;
    >> 데이터형이 다르다
    */

    struct MyStruct // 구조체 이름
    {
        string name;      // 맴버 선언
        string position;
        int height;
        int weight;
    } B; // 새로운 구조체를 선언하지 않아도 자동으로 만들어진다.

    MyStruct A;
    A.name = "Son";
    A.position = "Striker";
    A.height = 183;
    A.weight = 77;
    /*
    아래 와 같이 초기화 방식도 가능
    MyStruct A = {
        "Son",
        "Striker",
        183,
        77
    }
    */
    cout << A.name << endl;
    cout << A.position << endl;
    cout << A.height << endl;
    cout << A.weight << endl;

    B = {

    }; // 빈 값들은 0으로 선언됨
    cout << B.height << endl; // 0 출력



    MyStruct C[2] = { // 구조체 역시 배열로 선언할 수 있다.
        {"A", "A", 1, 1}, 
        {"B", "B", 2, 2}
    };

    cout << C[0].height << endl;

    return 0;
}

 

 

구조체란?

구조체(struct)는 다양한 데이터형을 하나의 집합으로 묶어 사용하는 자료형입니다. 일반적으로 배열은 같은 데이터형만 저장할 수 있지만, 구조체는 서로 다른 데이터형을 포함할 수 있다는 차이가 있습니다.

코드 분석

1. 구조체 정의

struct MyStruct {
    string name;
    string position;
    int height;
    int weight;
} B;
  • struct MyStruct는 구조체의 이름이 MyStruct인 새로운 자료형을 정의하는 부분입니다.
  • name, position은 string형이고, height, weight는 int형으로 구성됩니다.
  • 구조체의 마지막에 B;가 선언되어 있는데, 이는 MyStruct라는 구조체 타입의 변수를 바로 생성하는 방식입니다. B라는 이름의 변수가 자동으로 만들어집니다.

 

2. 구조체 변수 사용

MyStruct A;
A.name = "Son";
A.position = "Striker";
A.height = 183;
A.weight = 77;
  • A라는 MyStruct 타입의 변수를 선언한 후, 각각의 멤버 변수에 값을 할당합니다.
  • A.name = "Son"과 같이 구조체 멤버에 접근할 때는 . 연산자를 사용합니다.
MyStruct A = {"Son", "Striker", 183, 77};
  • 구조체를 선언하면서 동시에 초기화할 수도 있습니다. 이 방식으로 구조체의 멤버에 값을 한 번에 할당할 수 있습니다.

 

3. 구조체 배열

MyStruct C[2] = {
    {"A", "A", 1, 1},
    {"B", "B", 2, 2}
};
  • 구조체는 배열로도 선언할 수 있습니다. C[2]는 MyStruct 타입의 구조체 2개를 담을 수 있는 배열을 선언한 것입니다.
  • 배열의 각 요소는 { "A", "A", 1, 1 }와 같은 방식으로 초기화됩니다.
  • 배열처럼 구조체 멤버에 접근할 때는 C[0].height와 같이 사용할 수 있습니다.

 

4. 구조체 초기값

B = {};
cout << B.height << endl; // 0 출력
  • 구조체 B에 초기값을 제공하지 않으면 빈 값들은 기본적으로 0으로 초기화됩니다. 따라서 B.height는 0을 출력합니다.

 

구조체의 장점

  • 데이터 그룹화: 관련된 데이터를 하나로 묶어 관리할 수 있어, 코드의 가독성이 높아지고 유지보수가 용이합니다.
  • 다양한 데이터형 허용: 서로 다른 데이터형을 한꺼번에 다룰 수 있어, 실생활에 가까운 데이터를 모델링할 때 유용합니다.