본문 바로가기
프로그래밍/자료구조

[C언어와 함께 자료구조를] 구조체 알아보기

by 헬맷쓰다 2015. 3. 11.
반응형

정수형, 문자형, 부동소수점 타입 등은 C언어에서 사용되는 전형적인 기본 자료형입니다. 그러나, 이러한 기본 자료형만으로 프로그래밍을 할 수는 없습니다. 프로그래머는 스스로 타입을 정의하고 이 타입에 대한 변수를 만들 수 있습니다.

타입정의 (typedef)

   typedef는 어떤 변수의 역할을 명확히 하기 위해서 사용됩니다. 예를 들어, 다음과 같은 문장을 살펴봅시다.

 

typedef int boolean; 
#define FALSE 0 
#define TRUE !FALSE

   첫번째 문장은 boolean을 int와 똑같이 변수의 타입을 정의하는데 사용하고, 아래 두 문장은 boolean 변수의 값을 나타내는 상수를 정의합니다. 이렇게 선언하는 것은 정수 변수가 TRUE와 FALSE를 가진다는 것을 명확하게 알려주는 역할을 합니다.

   다른 예로 변수의 해석을 명확하게 해주는 예가 있습니다.

 

typedef char* string;

   위의 문장은 string이라는 타입이 char* 타입으로 해석되도록 합니다. 따라서 아래의 두 선언문은 같은 뜻입니다.

 

  char *s, *t; 
  string s, t;

   또 한가지 예로, 관련된 변수의 타입을 쉽게 바꿀 수 있는데요. 금액과 관련된 프로그램에서 다음과 같이 dollar 타입을 만들 수 있습니다.

 

   typedef int dollar;

   프로그램을 작성 중에 금액이 커져서 int로 부족한 경우 typedef의 int를 long, float, double 등으로 바꿀 수 있습니다.

   typedef는 사실 새로운 타입을 정의하는 것은 아닙니다. 앞서 선언한 boolean의 값은 dollar에 또 그역으로도 배정할 수 있습니다. 결국 typedef는 새로운 변수의 타입의 정의하는 것이아니라, 변수의 용도를 (프로그래머가) 명확히 이해하고 타입을 쉽게 변경할 수 있다는 잇점 때문에 사용하는 거죠.

 

구조체 (strudtures)

 구조체는 여러가지 정보를 가지는 변수입니다. 예를 들어 다음과 같이 사원명부를 작성한다면 다음과 같이 변수를 선언할 수 있습니다.

struct employee {
    char name[100];    // 이름
    int    hire_date;  // 입사일 
    int    birth;      // 생일
    int    tel;        // 전화번호
};

struct employee person; // 이렇게 선언합니다.

  구조체는 typedef와 결합하여 사용하기도 합니다. 이는 프로그램에서 구조체 변수를 사용하기 위해 매번 struct employee를 붙여 선언하는 번거로움을 줄여 줍니다.

typedef struct employee {
    char name[100];    // 이름
    int    hire_date;  // 입사일
    int    birth;      // 생일
    int    tel;        // 전화번호
} employee_t;

employee_t person;  // 이렇게 선언하여 사용합니다.

  구조체 내부의 변수 참조는 .연산자나 ->연산자를 사용합니다. 더 자세한 내용은 본격적인 자료구조 학습에 들어가며 살펴보도록 하겠습니다.

이상 타입정의(typedef)와 구조체(structures)에 대해서 간단하게 알아 봤습니다.

다음 번에는 기억장소 할당에 대해 알아보겠습니다. 여러가지 자료구조들을 공부하기 전에 마지막으로 학습하는 부분이고 중요한 내용이니 기대하셔도 좋습니다.

고맙습니다.

반응형

댓글