C 언어 - struct(구조체)

컴퓨터/C

728x90
반응형

struct(구조체) - 사용자 정의 자료형

C언어에서는 struct라는 키워드를 이용해서 구조체 즉 사용자가 원하는 자료형을 만들 수 있습니다. 

구조체를 사용하면 여러 자료형들을 조합하여 자신이 원하는 자료형을 만들고 사용할수 있습니다. 

 

구조체의 장점은 무엇인가?

여러 자료형을 묶어서 하나의 자료형으로 만든다는 것은 컴퓨터에 입장에서는 별반 차이가 없을 수 있지만, 사람에게는 엄청난 이점으로 다가옵니다.

예를 들어 게임의 플레이어의 직업을 만드는 프로그래밍을 한다고 가정해 보겠습니다. 

4가지의 직업과 각각의 직업에는 직업명, 공격력, 체력이 있다고 가정해 보도록 하겠습니다.

이전에 배운 기술들을 종합하여 프로그래밍을 하면 다음과 같이 할 수 있을 것입니다.

char name1 = "전사";
int att1 = 10;
int HP1 =  200;
char name2 = "도적";
int att2 = 20;
int HP2 =  100;
char name3 = "궁수";
int att3 = 15;
int HP3 =  150;

배열을 사용하든 위의 방식으로 사용하든 각각의 직업명, 공격력, 체력을 선언해 주어야 됩니다. 수가 많아질수록 선언하는 것도 번거롭고 접근하여 사용하는 것 또한 힘이 듭니다. 

하지만 직업별로 묶은 자료형을 만든다면 조금 더 사용자가 편리하게 접근하고 사용할 수 있을 것입니다.

그럼 sturct 키워드를 사용하여 사용자 정의 자료형을 만들어 보도록 합시다.

 

사용자정의 자료형 만들기 - 구조체의 선언

struct 구조체명{
    맴버변수
    맴버변수
};

struct Job {
  char name[10];
  int att;
  int HP;
};
  • sturct 키워드 뒤에 구조체의 이름을 정의합니다
  • 중괄호 { } 안에 구조체에 들어갈 자료형과 이름을 정의합니다.
  • 구조체는 자료형을 정의하는 것이기 때문에 사용하기 전에 선언되어야 합니다.
  • struct를 이용하여 사용자정의 자료형을 만들었습니다. 
    • 구조체 명으로 이 사용자 정의 자료형을 사용할 수 있습니다 (int, char처럼)
    • 구조체는 다양한 자료형의 묶음입니다. 그 안에 있는 다양한 자료형의 데이터들을 멤버, 멤버 변수라 합니다.

구조체를 이용한 변수 선언

사용자 정의 자료형을 만들었으면 이제 실제 변수로 사용을 해보도록 하겠습니다.

struct 구조체명 변수명;
struct Job job;
  • 사용자 정의 자료형이라는 것을 알리기 위해 struct 키워드를 사용합니다.
  • 이후 구조체명을 입력합니다
  • 그다음 실제 우리가 사용할 변수의 이름을 정해줍니다.

선언된 구조체 변수의 멤버에 접근

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

struct Job
{
    char name[10];
    int att;
    int HP;
};

int main()
{
    struct Job job;
    strcpy(job.name, "전사");
    job.att = 10;
    job.HP = 200;
    return 0;
}

 

  • 선언된 구조체 변수의 멤버에 접근하기 위해서는.(dot)을 사용합니다.
  • 구조체 변수명. 멤버 변수명을 통하여 접근할 수 있습니다.
  • strcpy의 경우 나중에 조금 더 자세히 다루도록 하겠습니다. 지금은 문자열 배열에 입력을 하기 위해 쓴 함수라고 생각만 해주세요

상기 소스코드처럼 하면 job이라는 구조체 변수를 통해 직업과, 공격력, 체력을 한 번에 담을 수 있는 사용자 정의 자료형이 됩니다.

 

배열의 형태로 구조체 변수의 선언

배열은 자료형의 묶음이라고 했습니다. 당연히 사용자 정의 자료형인 구조체 또한 배열화 하여 선언할 수 있습니다.

그럼 배열의 형태로 구조체 변수를 선언하여 맨 위의 질문 예제를 완성해보며 본문을 마무리하도록 하겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

struct Job
{
    char name[10];
    int att;
    int HP;
};

int main()
{
    struct Job job[3];
    strcpy(job[0].name, "전사");
    job[0].att = 10;
    job[0].HP = 200;

    strcpy(job[1].name, "도적");
    job[1].att = 20;
    job[1].HP = 100;

    strcpy(job[2].name, "궁수");
    job[2].att = 15;
    job[2].HP = 150;
    
    for (int i = 0; i < 3; i++)
    {
        printf("직업 : %s\n", job[i].name);
        printf("공격력 : %d\n", job[i].att);
        printf("체력 : %d\n", job[i].HP);
        printf("\n");
    }
    
    return 0;
}

 

728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - 구조체 포인터  (0) 2021.06.23
C 언어 - typedef 키워드  (0) 2021.06.22
C 언어 -포인터와 배열  (0) 2021.06.21
C 언어 - const 키워드  (0) 2021.06.18
C 언어 - 형변환(Casting)  (0) 2021.06.17

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :