본문 바로가기
C++

[C++] 구조체 사용 및 활용

by teamnova 2024. 5. 14.
728x90

C++에서 구조체 사용하기


C++에서 구조체(struct)는 관련된 데이터를 하나의 그룹으로 묶는 방법을 제공합니다. 클래스와 비슷하지만, 기본적으로 모든 멤버가 public입니다. 구조체는 데이터를 모으고, 가벼운 객체를 만드는 데 유용하며, 데이터 처리에 있어 간결함과 편리함을 제공합니다.

구조체의 정의 및 사용


구조체를 정의하고 사용하는 기본 예제를 통해 구조체의 작동 방식을 살펴보겠습니다.

#include <iostream>
#include <string>

// 구조체 정의
struct Student {
    std::string name;
    int age;
    double gpa;
};

int main() {
    // 구조체 인스턴스 생성
    Student student1;
    student1.name = "John Doe";
    student1.age = 20;
    student1.gpa = 3.5;

    // 구조체 인스턴스의 정보 출력
    std::cout << "Student Name: " << student1.name << std::endl;
    std::cout << "Age: " << student1.age << std::endl;
    std::cout << "GPA: " << student1.gpa << std::endl;

    return 0;
}


구조체 초기화


C++11 이상에서는 구조체의 멤버를 초기화하는 더 편리한 방법을 제공합니다. 이를 통해 코드를 더욱 깔끔하고 명확하게 작성할 수 있습니다.

#include <iostream>
#include <string>

struct Student {
    std::string name;
    int age;
    double gpa;

    // 생성자를 사용한 초기화
    Student(std::string n, int a, double g) : name(n), age(a), gpa(g) {}
};

int main() {
    // 생성자를 사용하여 객체 생성과 동시에 초기화
    Student student1("Jane Doe", 21, 3.8);

    std::cout << "Student Name: " << student1.name << std::endl;
    std::cout << "Age: " << student1.age << std::endl;
    std::cout << "GPA: " << student1.gpa << std::endl;

    return 0;
}


구조체와 배열


구조체와 배열을 함께 사용하면, 동일한 유형의 여러 데이터를 효율적으로 관리할 수 있습니다. 다음 예제에서는 구조체 배열을 사용하여 여러 학생의 정보를 저장하고 출력하는 방법을 보여줍니다.

#include <iostream>
#include <string>

struct Student {
    std::string name;
    int age;
    double gpa;
};

int main() {
    // 구조체 배열 선언 및 초기화
    Student students[2] = {
        {"Alice Johnson", 19, 3.9},
        {"Bob Smith", 22, 3.6}
    };

    // 배열의 구조체 요소에 접근하여 출력
    for (int i = 0; i < 2; i++) {
        std::cout << "Student Name: " << students[i].name << std::endl;
        std::cout << "Age: " << students[i].age << std::endl;
        std::cout << "GPA: " << students[i].gpa << std::endl;
    }

    return 0;
}


구조체는 C++에서 데이터를 효과적으로 관리하기 위한 강력한 도구입니다. 클래스와 유사하게 작동하지만, 기본적으로 모든 멤버가 공개되어 있어서 데이터 접근이 간편합니다. 구조체를 사용하면 코드의 가독성과 유지 관리성이 향상될 수 있습니다.

 

C++ 구조체의 활용: 함수 인수 및 반환 예제

구조체를 사용하여 함수의 인수와 반환 값을 관리하는 방법을 살펴보겠습니다. 구조체를 통해 여러 데이터를 함께 전달하고 처리할 수 있으며, 이는 코드의 가독성과 유지 관리를 향상시킬 수 있습니다.

예제 1: 구조체를 인수로 사용

#include <iostream>
using namespace std;

// 구조체 정의
struct Property {
    int savings;
    int loan;
};

// 함수 선언: 구조체 멤버를 직접 인수로 받음
int calculateNetWorth(int savings, int loan) {
    return savings - loan;
}

int main() {
    Property hong = {10000000, 4000000};  // 구조체 초기화
    int netWorth = calculateNetWorth(hong.savings, hong.loan);  // 함수 호출

    cout << "홍길동의 순자산은 " << netWorth << "원입니다." << endl;
    return 0;
}



예제 2: 구조체 주소를 인수로 사용

구조체의 주소를 인수로 전달하는 방식은 메모리를 절약할 수 있으며, 원본 데이터를 함수 내에서 직접 변경할 수 있습니다.

#include <iostream>
using namespace std;

struct Property {
    int savings;
    int loan;
};

// 함수 선언: 구조체 포인터를 인수로 받음
int modifyAndCalculate(Property* p) {
    p->savings += 500000;  // 변경 가능
    return p->savings - p->loan;
}

int main() {
    Property hong = {10000000, 4000000};
    int netWorth = modifyAndCalculate(&hong);  // 주소 전달

    cout << "수정 후 홍길동의 순자산은 " << netWorth << "원입니다." << endl;
    return 0;
}



예제 3: 구조체를 반환값으로 사용

#include <iostream>
using namespace std;

struct Property {
    int savings;
    int loan;
};

// 함수 선언: 구조체를 반환
Property createProperty() {
    return {15000000, 5000000};
}

int main() {
    Property hong = createProperty();  // 함수로부터 구조체 받음
    cout << "홍길동의 적금은 " << hong.savings << "원, 대출은 " << hong.loan << "원입니다." << endl;
    return 0;
}



구조체를 활용하여 다양한 방식으로 데이터를 조작하고, 함수 간에 효율적으로 데이터를 전달하는 방법을 보여줍니다. 구조체를 사용하면 복잡한 데이터 구조를 쉽게 관리할 수 있습니다.