Language/C++

[C++] Structure Type(구조체)

검은 까마귀 2024. 1. 19. 16:09

# 구조체란?

구조체(Structure Type)은 C++의 기본적인 타입(int, char, double 등등)들을 통해서 새롭게 정의를 할 수 있는 사용자 정의 타입이다. 개인적인 생각인데 해당 발상은 타입별로 자료형을 따로 선언해야한다는 단점을 극복하고 묶음의 단위로 사용하기 위함이 아닐까 싶다. 그 비슷한게 Class(클래스)가 있다. 글을 쓰면서 객체 VS. 구조체에 대해서 알아보겠다.

 

이하 비슷하게도 배열(Array)가 있지만 우리가 Array를 선언할때와 구조체를 선언할때를 보면 차이점을 명확하게 알 수있다.

char c[10]; //배열

//구조체
struct st{
    char[10] c;
    int n;
    double d;
};

 

위처럼  배열은 한가지 타임으로만 만들수 밖에 없다. 문자형이면 문자형, 정수형이면 정수형만, 하지만 구조체는 위와 같이 st라는 구조체에 문자열, 정수형, 더블형 까지 다 넣을 수 있게된다.

 

우리는 거기에 해당되는 구성하는 변수를 member라고 부른다. 뭐 여기까지는 구조체가 어떤 것인지 설명이 된거 같고 이해도 했다.

 

그렇다면 자바를 공부한 분들이라면 아시겠지만, 되게 성격이 비슷한 객체라는 것이 있는데 어떤 공통점이 있고 차이점이 있는지 알아보겠다.

 

# C++ 구조체 VS. 자바의 클래스

관련 내용을 검색해보면 많은 자료들이 나온다.

 

 

자바에서 클래스는 객체를 정의한 설계도 라고 생각하면된다. 가장 흔히 드는 예시로는 자동차가 있을텐데 자동차의 구성요소인 바퀴, 핸들, 엔징 등등이 모여서 객체가되고 바퀴에도 타이어, 휠 등등이 모여서 바퀴가 된다. 그게 객체를 정의한 설계도라는 것이다. 클래스에는 앞으로가기, 뒤로가기도 들어갈 수 있다. 우리는 이 과정을 통틀어서 추상화라고 부른다. 여기까지는 자바의 클래스에 대해서는 설명이 된거 같다.

 

그렇다면 자바의 클래스 C++의 구조체는 어떤 공통점을 갖을까? 일단, 다양한 자료형의 타입을 한곳에 묶을 수 있다는 공통점이 있다. 우리는 이를 데이터 캡슐화라고 부른다. 여기서 파생되는 커스터마이징을 할 수 있는 것과 인터페이스로 구현이 가능하다는 점이다.

 

 

그렇다면 차이점은 구조체는 Value기반이고, 클래스는 Reference 기반으로 동작한다. 또한 C++을 자바의 비해 저수준 레벨에서 동작하기 때문에 스택할당을 사용하고 자바는 힙할당을 사용한다.

 

먼가 다른 레퍼런스도 찾아보고 있는데 C++의 class와 struct만 비교하는 부분이 많았다. C++의 구조체는 객체지향과 절차지향의 둘다 있지만 java의 클래스는 OOP 그 자체이다 중간중간 다시 공부를 해야겠다.

# C++ 구조체 문법

대충 이론에 대해서는 알았으니, 앞으로 작성해야할 문법에 대해서 공부했다.

#include <iostream>
#include <string>
using namespace std;

struct AddressBook {
    char phoneNumber[20];
    char name[10];
    char address[80];
};

int main(void)
{
    AddressBook adBook = {"01012345678" ,"김똥개" , "김장시 감자구 고구마동"};
    cout << adBook.name << endl;
    cout << adBook.phoneNumber << endl;
    cout << adBook.address << endl;
}

 

이런식으로 구조체에 값을 넣어서 사용할 수 있다. 그렇다면 구조체 배열도 사용할 수있다.

#include <iostream>
#include <string>

struct AddressBook {
    char phoneNumber[20];
    char name[10];
    char address[80];
    int index;
};

int main(void) {
    AddressBook adBook[10];
    for (int i = 0; i < 10; i++) {
        adBook[i] = {"01012345678", "김똥개", "김장시 감자구 고구마동",i };
        cout << adBook[i].index << endl;
        cout << adBook[i].name << endl;
        cout << adBook[i].phoneNumber << endl;
        cout << adBook[i].address << endl;

    }
}

 

사실 문법을 공부하는건 어렵지는 않다. 컨벤션이나 어떤식에서 구조체를 사용해야할지는 모르니깐... 그 부분이 어렵게 느껴진다. 

 

반응형

'Language > C++' 카테고리의 다른 글

[C++] Template(템플릿)  (0) 2024.01.23
[C++] Class & 접근제어지시어  (0) 2024.01.22
[C++] Pointer(포인터)  (0) 2024.01.18
[C++] Assignment 주소록(1) - 요구사항 분석  (0) 2024.01.13
[C++] C++ 동작 원리  (0) 2024.01.13