구조체

목차

개요

C와 C++언어에서 구조화된 데이터를 처리할때 사용한다. 쉽게 그리고 한마디로 말하면 구조체란 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구이다. 구조체를 정의할 때 struct를 사용한다.

아마 구조체에 대해 찾아볼 정도면 이미 여러가지 자료형(type)을 만나본 뒤일 것이다. [1] 이러한 자료형들은 이미 C와 C++ 안에 내장되어있는 자료형으로 사용자(우리)가 직접 건들수가 없다. 하지만 구조체가 그와 비슷한 일을 하게 해준다. 바로 새로운 자료형을 우리가 직접 정의할 수 있게 해주는 것이다. 사용자가 직접 정의한 자료형을 '사용자 정의 자료형(user defined data type)'이라고 부른다.

마우스 포인터를 예로 들어보자.
마우스 포인터는 2차원 내에서 움직이기 때문에 x값과 y값을 가지고 위치를 표현할 수 있다. 마우스가 움직일때마다 이 x, y값은 변하며 둘 중 하나라도 없어지게 되면 마우스의 위치를 의미하던 이 값은 의미를 잃게 된다. 이 두 값은 다음과 같이 선언할 수 있다(자료형과 변수명은 사용자에 따라, 상황에 따라 달라질 수는 있다).

int Xposition; // 정수형 Xposition 선언
int Yposition; // 정수형 Yposition 선언

보다시피 2개의 변수를 따로 선언했다.

struct position //position형 구조체 선언
{
int Xposition; //정수형 Xposition 선언
int Yposition; //정수형 Yposition 선언
}

이해하기, 아니 받아들이기 힘들지도 모르지만 구조체를 알기 위해선 방금 position형 자료형이 선언됐다는 것을 인정해야 한다. 다른 int형, float형, double형의 자료형처럼 position 형 자료형이 생긴 것이다. 사용법을 보면 금방 익숙해질 것이다.

struct position pos1, pos2; //position 자료형을 가진 변수 pos1, pos2를 선언하였습니다.
pos1.Xposition=10; //position형 pos1변수의 Xposition의 값을 10으로 초기화하였습니다.
pos1.Yposition=34; //position형 pos1변수의 Yposition의 값을 34으로 초기화하였습니다.
pos2.Xposition=23; //position형 pos2변수의 Xposition의 값을 10으로 초기화하였습니다.
pos2.Yposition=7; //position형 pos2변수의 Yposition의 값을 34으로 초기화하였습니다.
처음 선언부를 보면 일반 변수처럼 ,를 이용해 연속적으로 선언이 가능한 모습을 볼 수 있다. 이것이 가능한 것은 엄염히 하나의 자료형으로서 변수를 선언하고 있기 때문이다. 그리고 구조체 내부의 값에 접근하기 위해서는 .을 이용한다. pos1, pos2 변수의 값을 .를 이용해 접근한 뒤 임의의 값으로 초기화 하는것을 볼 수 있다.[2]
  1. 예를 들어 int, double, float, 배열, 포인터 변수등이 그것이다.
  2. 어디까지나 예제이기때문에 왜 2개의 변수를 선언했고 저 초기화값에는 어떤 의미가 담겨있을까를 고민하기 시작한다면 머릿속이 심히 골룸해진다.