60 – 구조체

구조체는 서로 다른 데이터형의 변수들을 하나로 묶어 놓은 모임으로, 복잡한 데이터를 다루는 데 편리하다. 예를 들어, 차량 관리 프로그램을 작성할 경우에 각 차량에 대한 정보를 각각 관리하는 것보다 이 정보를 하나로 묶어서 관리하면 더 편리한데, 이 때 사용할 수 있는 것이 구조체이다. 차량에 대한 구조체를 구성한다고 할 때, 아래와 같은 예시대로 할 수 있다. 이름과 연식, 연료량을 묶어서 정의하였다.

struct car
{
char name[10];    //차량 이름
int year;                // 연식
double fuel;         // 연료량
};

struct는 구조체를 만들기 위해 바드시 필요한 부분이고, car는 태그 이름이다. 그리고 이 구조체는 name, year, fuel 세 개의 맴버로 이루어져 있다. 이 맴버들은 사용자가 정의한 새로운 형태의 데이터형이다. 그리고 이 새로운 데이터형인 struct car형의 변수를 선언하는 방법은 다음과 같다. 집앞에 있는 차량이 보여서 그걸로 예시를 만들어보았다.

struct car sonata;

이렇게 되면 sonata라는 이름의 변수에는 name, year, fuel을 내부에 가지고 있는 구조로 이루어져있다.

sonata -> [ name, year, fuel ]

이 구조체도 정의와 변수 선언을 동시에 할 수 있는데, 정의부의 제일 마지막에 변수명을 적어줌으로써 선언이 된다.

struct car
{
char name[10];    //차량 이름
int year;                // 연식
double fuel;         // 연료량
} sonata;     //변수 선언

또한 구조체를 정의할 때 태그 이름을 지정하지 않아도 된다. 그러나 이러한 구조체형은 이후의 선언을 할 수 없게 되는 문제점을 가지게 된다.

그리고 typedef를 사용하면 데이터형 struct를 car라는 이름으로 부르겠다는 것을 의미하며, 구조체형 이름의 길이가 짧아지는 장점이 생긴다. 이 때에는 구조체의 태그 이름을 생략해도 아무 문제가 발생하지 않는다. typedef에 대해서는 더 자세히 설명할 기회가 있다.

typedef struct
{
char name[10];    //차량 이름
int year;                // 연식
double fuel;         // 연료량
} car;                         //car라는 타입이 생성됨.

…..

car sonata;     //변수 선언 시 구조체의 이름이 짧아짐

만약, 구조체형 변수 sonata와 year 맴버에 2003을 저장하려면 도트(.)를 이용하여 접근한다.

sonata.year = 2003;

이렇게 맴버를 이용하는 것을 ‘맴버로 접근한다’라고 하며, 읽고 쓰는 데 이용된다.

구조체의 구성을 예시로 확인하기로 하겠다.

스크린샷 2017-04-21 오후 4.35.59스크린샷 2017-04-21 오후 4.36.22

구조체형 변수도 일반 변수처럼 선언할 때 초기화 할 수 있으며, 배열 변수를 초기화하는 것와 유사하게 진행하면 된다.

struct car sonata = {
“SONATA”.
2003,
77.7
};

다른 구조체형일 경우에는 불가능하지만 동일한 구조체형의 변수들간에는 직접 복사 또한 가능하다. 바로 위에 sonata 외에도 동일한 차량으로 sm5를 만들어서 복사하고자 하면, 아래의 코드가 추가될 것이다.

struct car sm5;
sm5 = sonata;           //복사됨

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.