▶ 사용자 정의 자료형이란?
- 기존의 자료형을 기반으로 새로운 자료형의 조합을 만드는 기능
ㄴ 사용자 정의 자료형을 활용하면 특정 데이터의 집합을 표현하는 것이 가능하다.
C / C++ 언어의 사용자 정의 자료형의 종류
- 열거형 (심볼릭 상수를 정의하는 자료형)
- 구조체 (특정 데이터의 집합을 정의하는 자료형)
- 공용체 (특정 데이터의 집합을 정의하는 자료형)
- 클래스 (OOP에서 특정 객체를 생성하고 관리하는 자료형)
※ C: 구조체 / C++: 클래스
ㄴ 둘의 차이를 알아 가기 위해서는 자료구조부터 메모리, OS 영역으로 넘어감.
EX) 표기법 주의 -> 파스칼
enum EUnitType
{
Unit_Type_A,
Unit_Type_B,
Unit_Type_C
};
▷ C / C++ 언어의 구조체 선언 방법
- 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구
- C++ 에서는 클래스가 도입되었지만 C언어와의 호환성 때문에 구조체를 그대로 사용할 수 있다.
- C++ 구조체는 C언어의 구조체에 기능을 확장하여 기존의 클래스와 동일한 구조와 기능을 가진다.
EX) 표기법 주의 -> 헝가리안 + 스네이크
struct STUnitData
{
int m_nID;
int m_nLevel;
};
▷ C / C++ 언어의 공용체 선언 방법
EX)
union STUnitData
{
int m_nID;
int m_nLevel;
};
ㆍ 구조체 vs 공용체
- 구조체는 구조체를 구성하는 각각의 필드가 서로 별개의 메모리를 사용하는 반면 공용체는 하나의 메모리를 가지고 각각의 필드가 서로 공유하는 구조를 지닌다.
- 그렇기 때문에 공용체에서는 각 필드의 값이 할당 될 경우 마지막으로 할당한 필드의 값만 유효하다.
ㄴ do ~ while 과 비슷함... 특정 로직에 사용할 경우 강력하게 작용한다.
◇ 사용자 저으이 자료형부터는 접근 범위(영역)에 대해서 신경을 많이 써야 한다.
ㄴ 접근 범위란? Ex) 지역, 전역, 정적 지역, 정적 전역 등....
ㄴ 복수의 자료형이 사용되므로 메모리 손해가 막심한.
namespace EXAMPLE_3
{
//0.설계 + 추상화
//1. 선언
//2. 구현화 부분
//3. 실제 사용되는 부분
struct tagFamily
{
char* name;
int age;
int height;
float weight;
bool wedding;
};
=====================================
열거형 상수는 기본적으로 특정 값을 할당하지 않으면 컴파일러에 의해서 자동으로 값을 할당한다.
(0부터 -> 순서대로 부여한다.)
단, 특정 상수에 값을 할당했을 경우 해당 상수 밑으로는 차례대로 해당 상수에
할당 된 값에서 +1씩 증가해서 할당이 이뤄진다.
enum class EColor_Type : uint16_t
{
RED,
GREEN,
BLUE = 1000,
BLACK,
WHITE
};
// class가 붙어서 별도의 namespace를 갖는다.
// uint16_t 의 경우 데이터 량을 조절을 자료형으로 명시
// 나중에 다른 객체와 만나 모호함을 만날 수 있다면 생각해봐야 한다.
추가된 기능으로 열거형에는 반드시 이름을 명시할 필요가 없어졌다.
ㄴ 익명의 개념
ㄴ 익명, annonymous, 1회성 데이터가 떠오른다.
해당 방식으로 선언된 열거형은 식별 할 수 있는 이름이 당연히 존재하지 않기 때문에 따로 변수화 시키는 건 불가능하다.
이러한 규칙은 개정이 되면서 다르사용자 정의 자료형에도 적용된다.
enum
{
UNIT_SIZE = 5
};
매크로 상수와의 차이점? 컴파일 타임 시간에 영향이 있다.
union STData
{
int m_nDataA;
int m_nDataB;
int m_fData;
};
공용체는 특정 부분에서 사용하면 메모리 절약이 가능하다.
- 일단은 사용하기 위해서는 정의가 필요하고 구조체 멤버 변수에 접근하기 위해서는 '.'연산자를 사용한다.
- 그 외에는 일반적인 변수와 동일 시 되기 때문에 사용을 위해서 초기화가 필요하다.
- 또 다른 특징이 있다면 구조체의 초기화는 배열의 초기화와 같이
지정 된 값이 순서대로 들어간다는 특징이 있다.
cout << "블랙: " << BLACK << endl;
ㄴ 블랙이 무슨 블랙인지 모호함을 일으킴
ㄴ 객체 지향 파괴 코드
◇ 사용자 정의 자료형 중 열거형은 switch문과 궁합이 좋다.
◇열거형 자료에 수가 정해져 있어 for와 같이 쓰이기 애매하다.
◇ 대부분의 게임에서 방향 잡을 때 필수로 사용이 된다.
ㄴ Why? 편리함 + 유지보수 용이함
'기초지식' 카테고리의 다른 글
09. 포인터 (0) | 2023.05.17 |
---|---|
08-2. 4대 문자열 (0) | 2023.05.17 |
07. 삼항 연산자 + 문자열 (0) | 2023.05.15 |
06-2. 난수 + 셔플 (0) | 2023.05.13 |
06-1. 배열 (0) | 2023.05.11 |