구조체의 기본
구조체란?
구조체(structure type)란 사용자가 C++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다.
구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다.
배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다.
이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다.
C++의 구조체는 변수뿐만 아니라 함수까지도 멤버 변수로 가질 수 있습니다.
또한, C++의 구조체는 타입일 뿐만 아니라, 객체 지향 프로그래밍의 핵심이 되는 클래스(class)의 기초가 됩니다.
구조체의 선언
C++에서 구조체는 struct 키워드를 사용하여 다음과 같이 선언합니다.
정의
struct 구조체이름
{
멤버변수1의타입 멤버변수1의이름;
멤버변수2의타입 멤버변수2의이름;
...
};
다음은 book이라는 이름의 구조체를 선언하는 그림입니다.
이렇게 선언된 구조체 타입을 가지고 다음과 같이 구조체 변수를 선언할 수 있습니다.
선언
struct 구조체이름 구조체변수이름;
예제
struct Book web_book;
구조체 멤버로의 접근 방법
배열에서는 인덱스를 이용하여 배열 요소에 접근할 수 있습니다.
하지만 구조체에서 구조체 멤버로 접근하려고 할 때는 멤버 참조 연산자(.)를 사용해야 합니다.
구조체 멤버로의 접근 방법은 다음과 같습니다.
문법
구조체변수이름.멤버변수이름
예제
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원입니다.
narrowing cast에 대한 더 자세한 사항은 C++ 1차원 배열 수업에서 확인할 수 있습니다.