구조체란?
구조체(structure type)란 사용자가 C++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다.
구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다.
배열이 같은 타입의 변수 집합이라고 한다면,
구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다.
이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다.
C++의 구조체는 변수뿐만 아니라 함수까지도 멤버 변수로 가질 수 있습니다.
또한, C++의 구조체는 타입일 뿐만 아니라, 객체 지향 프로그래밍의 핵심이 되는 클래스(class)의 기초가 됩니다.
구조체 선언
struct 구조체이름
{
멤버변수1의타입 멤버변수1의이름;
멤버변수2의타입 멤버변수2의이름;
...
int idx;
string name;
int age;
char address[100];
};
이렇게 선언된 구조체 타입을 가지고 다음과 같이 구조체 변수를 선언할 수 있습니다
문법
struct 구조체이름 구조체변수이름;
예시 ) struct Book web_book;
구조체 멤버로의 접근 방법
배열에서는 인덱스를 이용하여 배열 요소에 접근할 수 있습니다.
하지만 구조체에서 구조체 멤버로 접근하려고 할 때는 멤버 참조 연산자(.)를 사용해야 합니다.
구조체 멤버로의 접근 방법은 다음과 같습니다.
문법
구조체변수이름.멤버변수이름
구조체 변수의 초기화
C++에서 구조체 변수는 중괄호({})를 사용한 초기화 리스트를 사용하여 초기화합니다.
문법
구조체변수이름 = {멤버변수1의초깃값, 멤버변수2의초깃값, ...};
예제 ) web_book = {"HTML과 CSS", "홍길동", 28000};
사용 예제
struct book {
string title;
string author;
int price;
};
book web_book = {"HTML과 CSS", "홍길동", 28000};
book java_book = {"Java language", "이순신"};
중첩된 구조체
C++에서는 구조체를 정의할 때 멤버 변수로 또 다른 구조체를 포함할 수 있습니다.
struct Name{
string first;
string last;
};
struct Friends{
Name first_name;
string address;
string job;
};
구조체의 메모리 크기
구조체를 메모리에 할당할 때 컴파일러는
프로그램의 속도 향상을 위해 바이트 패딩(byte padding)이라는 규칙을 이용합니다.
구조체는 다양한 크기의 타입을 멤버 변수로 가질 수 있는 타입입니다.
하지만 컴파일러는 메모리의 접근을 쉽게 하려고 크기가 가장 큰 멤버 변수를 기준으로
모든 멤버 변수의 메모리 크기를 맞추게 됩니다.
이것을 바이트 패딩이라고 하며,
이때 추가되는 바이트를 패딩 바이트(padding byte)라고 합니다.
'C++' 카테고리의 다른 글
C++ 클래스 생성 / 헤더파일. (0) | 2022.10.28 |
---|---|
C++ 함수 포인터 (0) | 2022.10.27 |
C++ 공용체 ( union ) (0) | 2022.10.27 |
메모리의 동적 할당(dynamic allocation) (0) | 2022.10.27 |
C++ 학습 참고 사이트 (0) | 2022.10.26 |