프로그래밍/C++

[C++] 구조체(struct), 공용체(union), 열거체(enum)

Nessie! 2022. 12. 4. 16:12

구조체, 공용체, 열거체, 클래스 등 통틀어 사용자 정의 자료형이다! 

 

사용자 정의 자료형이란, 사용자가 필요에 의해 직접 만든 자료형으로, 간단히 말하면 여러 자료형을 하나로 묶어서 하나의 자료형처럼 쓰는 그런 것이다.

 

구조체(struct)

간단하게 구조체(struct)는 아래와 같은 특징이 있따.

ㄴ 사용자 정의 자료형은 블록단위 데이터로 볼 수 있는데, 멤버변수 중 가장 큰 데이터형의 크기를 기준으로 메모리 블럭을 지정해둔다.

ㄴ 멤버변수가 선언된 순서대로 메모리 크기를 계산하기 때문에 작은 자료형부터 선언하는 것이 메모리 절약에 도움이 된다.

struct myStruct
{
	char charArray[3];			//멤버변수에 배열이 있어도 자료형 크기를 기준으로 계산된다.
    int testInt;
    float testFloat = 3.0f;		//값을 초기화 해두면 해당 자료형의 변수를 만들면 이 값이 미리 들어가 있는 채로 생성된다고 생각하면 된다
};

typedef 을 이용하여 다른 별칭을 설정할 순 있는데, 굳이..? 라는 생각이 든다

 

typedef struct MyStruct
{
	char charArray[3];
    int testInt;
    float testFloat = 3.0f;
}TESTNAME;

이렇게 해두면 TESTNAME 이라는 자료형으로 변수를 선언할 수 있게 된다.

 

구조체로 선언한 변수에 멤버 연산자(.)를 통해 멤버변수에 접근할 수 있다.

TESTNAME test1;
MyStruct* test2;

test1.testInt = 3;
test2->testInt = 2;

test2는 포인터형 변수로 선언하여 주소로 접근하기 떄문에 ->로 멤버변수에 접근할 수 있다.

 

공용체(union)

공용체는 사실 써본적이 없어서 잘 모르겠다.

union MyUnion
{
	int testInt;
    float testFloat;
}

선언은 이렇게 키워드 union을 붙여서 선언한다.

공용체를 선언할 경우 가장 큰 자료형의 메모리를 할당하고 그 메모리를 공유한다.

메모리를 공유하기 때문에 한가지 자료형으로 통일해야하며, 위 예제 코드처럼 쓰면 값이 이상하게 나오는 문제가 있을 수 있으니 돈두댓

 

열거체(enum)

상수를 다른 이름으로 지정해서 쓸 수 있는 문법이다!

enum MY_ENUM
{
	FIRST,
    SECONDE = 3,		//이러면 이 아래부터는 3부터 증가한다
    THIRD
}

enum문은 주로 대문자로 작성한다

정수형으로 되어있으며 상수ㄹ고 볼 수 있다!

지정한 원소의 개수와 무관하게 데이터 크기는 4byte로 고정된다.

이거는 자료형이라기 보다는 typedef처럼 이름을 지정해서 쓰는 느낌? 이며, 선언한 순서대로 값은 1씩 증가한다.

즉 FIRST는 0이고 SECONDE부터는 3, THIRD는 4를 의미한다.

보통 switch 문에 많이 쓴다