구조체

1 minute read


구조체(struct)

하나 이상의 변수를 묶어 그룹화한 사용자 정의 자료형이다.
코드를 작성하다보면 서로 연결된 관계에 있는 변수를 만들 때 가 있다.


예를 들어 학생증을 만드는 프로그램이 있다고하면

char studentName[10];
int number;
int grade;
int birthday;
.
.
.

이처럼 학생증에 담을 여러 정보를 학생마다 선언해주어야 하기 때문에 코드는 복잡해지고 작업량도 증가한다. 이럴 때 구조체를 사용하면 효율적인 데이터 관리가 가능해진다.

struct StudentCard
{
  char name[10];
  int number;
  int grade;
  int birthday;
};

StudentCard라는 새로운 자료형을 만들었다. 자료형에 담을 수 있는 데이터 유형은 중괄호 안의 변수들로 정해진다. 보통 구조체는 메인함수 외부에 전역으로 선언하여 어디서든 접근할 수 있도록 한다.


접근하는 방법

int main()
{
  struct StudentCard studentA;
  stucdentA = { "Bak", 123, 4, 0505};

	strcpy(studentA.name, "Bak");
	studentA.age = 16;
	studentA.number = 13;

  return 0;
}


1. 멤버변수

  • 구조체를 선언할 때 내부에 선언한 변수를 멤버변수라고 한다. 멤버변수는 패딩이라는 것이 존재하기 때문에 자료형에 따라서 할당되는 메모리의 크기에 맞춰 순서를 정해주어야 낭비되는 메모리를 줄일 수 있다.

  • 멤버변수를 선언할 때 값을 초기화 시킬 수 있으며 구조체 객체를 생성할 때 따로 값을 넣지 않으면 이 값이 기본값으로 들어간다.

    struct StudentCard
    {
      char name[10];
      int age = 16;
      int number = 1212;
    }
    


2. 구조체 객체 생성

  • 전역으로 만든 구조체는 임의로 생성한 일종의 자료형으로 볼 수 있다.
  • 구조체를 사용하기 위해서는 메인 함수 내에서 객체를 생성해야한다. 이를 인스턴스라고 부른다.

    // 구조체 객체 선언
    // 구조체 생성과 동시에 객체 생성
    struct StudentCard
    {
      ~
    } studentA, studentB;
        
    int main()
    {
      // 함수내에서 객체 생성  
      struct StudentCard studentA;  
      // struct는 컴파일 버전에 따라 생략이 가능하다. 
      StudentCard studentA;  
          
      return 0;
    }
    
    


3. 멤버변수 접근

  • 구조체의 멤버변수를 사용하는 방법

    // 선언한 멤버변수 자료형에 맞춰 값을 넣어준다.
    studentA = { "Bak", 123, 4, 0505};  
    
    // .을 사용해서 각 멤버변수에 접근이 가능하다.
    studentA.age = 16;  
    
    // 문자열의 경우 strcpy함수를 사용해야한다.
    strcpy(studentA.name, "Bak");  
    

    이 함수를 사용하기 위해서는 헤더를 추가해 주어야하며 컴파일 버전이 최신이라면 strcpy_s로 사용하여야한다.

Tags: ,

Categories:

Updated: