본문 바로가기
개발/C++ (98,03,11,14,17,20,23)

Before Classic C++ : struct

by snowoods 2025. 10. 31.

Before Classic C++

 

구조체 (struct)

 

개요

구조체(struct)는 서로 다른 타입의 변수들을 하나의 논리적 단위로 묶어서 관리하는 사용자 정의 데이터 타입입니다. 관련된 데이터를 그룹화하여 코드의 구조를 명확하게 만들 수 있습니다.

 

C++ 버전별 주요 키워드 도입 시기

  • C99 이전 (C/C++): struct는 C 언어에서부터 존재했으며, 순수하게 데이터만을 묶는 역할을 했습니다.
  • C++: C++에서는 struct가 확장되어 데이터 멤버뿐만 아니라 멤버 함수, 생성자, 접근 제어 지정자(public, private, protected) 등을 가질 수 있게 되었습니다. struct의 모든 멤버는 기본적으로 public 접근 권한을 갖습니다.
  • C++11: 클래스 내 초기화(in-class member initialization)가 가능해져, 구조체 멤버 변수에 직접 기본값을 할당할 수 있게 되었습니다.

 

내용 설명

struct는 여러 데이터를 묶어 새로운 타입을 정의합니다. C++에서 structclass와 거의 동일한 기능을 수행하지만, 유일한 차이점은 기본 접근 수준입니다. struct는 멤버들이 기본적으로 public이고, classprivate입니다. 관례적으로 struct는 데이터 묶음(POD, Plain Old Data)에, class는 복잡한 로직과 상태를 갖는 객체에 사용됩니다.

 

예제 코드

#include <iostream>
#include <string>

// 학생 정보를 담는 구조체 정의
struct Student {
    // 데이터 멤버
    std::string name;
    int studentID;
    double gpa = 0.0; // C++11 이상: 멤버 변수 초기화

    // 멤버 함수
    void printInfo() {
        std::cout << "--- Student Info ---" << std::endl;
        std::cout << "Name: " << name << std::endl;
        std::cout << "ID: " << studentID << std::endl;
        std::cout << "GPA: " << gpa << std::endl;
    }
};

int main() {
    // 구조체 변수 선언 및 초기화
    Student student1;
    student1.name = "John Doe";
    student1.studentID = 2024001;
    student1.gpa = 3.8;

    // 멤버 함수 호출
    student1.printInfo();

    std::cout << std::endl;

    // 초기화 리스트를 사용한 구조체 변수 생성
    Student student2 = {"Jane Smith", 2024002, 4.2};
    student2.printInfo();

    return 0;
}

 

실행 결과

--- Student Info ---
Name: John Doe
ID: 2024001
GPA: 3.8

--- Student Info ---
Name: Jane Smith
ID: 2024002
GPA: 4.2

 

활용팁

  • C++에서는 간단한 데이터 묶음을 표현할 때는 struct를, 캡슐화와 데이터 은닉이 중요한 복잡한 객체를 설계할 때는 class를 사용하는 것이 일반적인 관례입니다.
  • struct의 모든 멤버는 기본적으로 public이므로, 외부에서 자유롭게 접근해야 하는 데이터 구조에 적합합니다.