..

Search

31) 구조체의 기본

31) 구조체의 기본

구조체의 기본


구조체란?

구조체(structure type)란 사용자가 C++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다.

구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다.

 

배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다.

이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다.

 

C++의 구조체는 변수뿐만 아니라 함수까지도 멤버 변수로 가질 수 있습니다.

또한, C++의 구조체는 타입일 뿐만 아니라, 객체 지향 프로그래밍의 핵심이 되는 클래스(class)의 기초가 됩니다.


구조체의 선언

C++에서 구조체는 struct 키워드를 사용하여 다음과 같이 선언합니다.

정의

struct 구조체이름

{

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...

};

 

다음은 book이라는 이름의 구조체를 선언하는 그림입니다.

 

구조체 선언

 

이렇게 선언된 구조체 타입을 가지고 다음과 같이 구조체 변수를 선언할 수 있습니다.

선언

struct 구조체이름 구조체변수이름;

예제

struct Book web_book;

 

C++에서는 구조체 변수를 선언할 때 struct 키워드를 생략할 수 있습니다.

구조체 멤버로의 접근 방법

배열에서는 인덱스를 이용하여 배열 요소에 접근할 수 있습니다.

하지만 구조체에서 구조체 멤버로 접근하려고 할 때는 멤버 참조 연산자(.)를 사용해야 합니다.

 

구조체 멤버로의 접근 방법은 다음과 같습니다.

문법

구조체변수이름.멤버변수이름

예제

web_book.author


구조체 변수의 초기화

C++에서 구조체 변수는 중괄호({})를 사용한 초기화 리스트를 사용하여 초기화합니다.

문법

구조체변수이름 = {멤버변수1의초깃값, 멤버변수2의초깃값, ...};

예제

web_book = {"HTML과 CSS", "홍길동", 28000};

 

이때 구조체 정의에서 멤버 변수가 정의된 순서에 따라 차례대로 초깃값이 설정되며, 나머지 멤버 변수는 0으로 초기화됩니다.

 

예제

struct book

{

    string title;

    string author;

    int price;

};

 

int main(void)

{

    book web_book = {"HTML과 CSS", "홍길동", 28000};

    book java_book = {"Java language", "이순신"};

 

    cout << "첫 번째 책의 제목은 " << web_book.title << "이고, 저자는 " << web_book.author

        << "이며, 가격은 " << web_book.price << "원입니다." << endl;

    cout << "두 번째 책의 제목은 " << java_book.title << "이고, 저자는 " << java_book.author

        << "이며, 가격은 " << java_book.price << "원입니다.";

    return 0;

}

코딩연습 ▶

실행 결과

첫 번째 책의 제목은 HTML과 CSS이고, 저자는 홍길동이며, 가격은 28000원입니다.

두 번째 책의 제목은 Java language이고, 저자는 이순신이며, 가격은 0원입니다.

 

C++11부터는 구조체 변수를 초기화할 때에 대입 연산자(=)를 생략할 수 있으나, narrowing은 지원하지 않습니다. 

 

narrowing cast에 대한 더 자세한 사항은 C++ 1차원 배열 수업에서 확인할 수 있습니다.

 

C++ 1차원 배열 수업 확인 =>


연습문제