구조체 (Struct)
구조체는 서로 다른 자료형의 변수들을 하나로 묶어 새로운 자료형을 만드는 사용자 정의 자료형(User Defined Type)이다.
관련된 데이터를 하나의 단위로 관리할 수 있도록 도와준다.
구조체 선언
기본 문법
struct 구조체이름
{
자료형 변수이름;
자료형 변수이름;
};
예시
struct Player
{
string Name;
int HP;
int Attack;
};
이제 Player는 새로운 자료형이 된다.
구조체 변수 선언
Player player;
값 저장
player.Name = "용사";
player.HP = 100;
player.Attack = 20;
출력
cout << player.Name << endl;
cout << player.HP << endl;
구조체 초기화
Player player =
{
"용사",
100,
20
};
또는
Player player{ "용사", 100, 20 };
구조체 배열
구조체는 배열로 선언할 수 있다.
기본 문법
구조체이름 변수이름[크기];
예시
Player players[3];
값 저장
players[0].Name = "전사";
players[1].Name = "마법사";
players[2].Name = "궁수";
구조체 포인터
구조체는 포인터로 사용할 수 있다.
기본 문법
구조체이름* 변수이름;
예시
Player player;
Player* ptr = &player;
구조체 포인터 접근
일반 변수
player.HP = 100;
접근 연산자 . 사용
포인터
ptr->HP = 100;
접근 연산자 -> 사용
접근 연산자
. (멤버 접근 연산자)
구조체 변수를 사용할 때 사용한다.
Player player;
player.HP = 100;
-> (포인터 멤버 접근 연산자)
구조체 포인터를 사용할 때 사용한다.
Player* ptr = &player;
ptr->HP = 100;
아래 코드와 동일하다.
(*ptr).HP = 100;
구조체 안에 함수 선언
C++에서는 구조체 안에 함수를 선언할 수 있다.
struct Player
{
string Name;
int HP;
void PrintInfo()
{
cout << Name << endl;
cout << HP << endl;
}
};
사용
Player player;
player.Name = "용사";
player.HP = 100;
player.PrintInfo();
구조체 생성자
구조체도 생성자를 가질 수 있다.
struct Player
{
string Name;
int HP;
Player()
{
Name = "Unknown";
HP = 100;
}
};
사용
Player player;
구조체와 클래스의 차이
struct Player
{
int HP;
};
class Player
{
int HP;
};
차이점
| 항목 | struct | class |
|---|---|---|
| 기본 접근 지정자 | public | private |
| 상속 기본 지정자 | public | private |
struct
struct Player
{
int HP;
};
Player player;
player.HP = 100;
기본이 public
class
class Player
{
int HP;
};
Player player;
player.HP = 100; // 오류
기본이 private
구조체 사용 예시
플레이어 정보
struct Player
{
string Name;
int HP;
int MP;
int Attack;
};
아이템 정보
struct Item
{
string Name;
int Price;
int Quantity;
};
몬스터 정보
struct Monster
{
string Name;
int HP;
int Damage;
};
구조체의 장점
- 관련된 데이터를 하나로 묶을 수 있다.
- 코드의 가독성이 좋아진다.
- 배열, 포인터, 함수와 함께 사용할 수 있다.
- 새로운 자료형을 만들 수 있다.
- C++에서는 함수와 생성자도 포함할 수 있다.
정리
- 구조체는 여러 자료형을 하나로 묶어 새로운 자료형을 만드는 기능이다.
struct 구조체이름 { ... };형태로 선언한다.- 구조체 변수는
.연산자로 멤버에 접근한다. - 구조체 포인터는
->연산자로 멤버에 접근한다. - 구조체 배열을 만들 수 있다.
- 구조체 포인터를 사용할 수 있다.
- C++에서는 함수와 생성자를 포함할 수 있다.
struct와class의 가장 큰 차이는 기본 접근 지정자(public/private)이다.