언리얼 - C++ 12 : 배열, 구조체

김정환·2025년 3월 18일

Unreal C++

목록 보기
12/37

1️⃣ 배열 Array

동일한 자료형을 여러 개 이어서 사용하는 것

  • 메모리를 연속적으로 사용한다는 특성이 있음.

왜 쓰는가

  • 어떤 종류의 자료형을 여럿 만들어서 써야할 때가 있을 것.

기본 문법

자료형 변수명[배열 갯수]

int arr[10] = {}; // 선언, 초기화
// 빈 중괄호 == 모두 0으로 선언

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
...
arr[9] = 10;

주의

범위 초과

int iArray[10] = {};
iArray[10] = 10;
  • 범위 초과는 본래 디버그 모드에선 바로 발견 가능하지만
    릴리즈 모드에서는 별도의 오류 표시가 나지 않을 수 있음.
    • 사이즈 부분이 변수화되기 때문에 직관적으로 바로 발견하지 못할 수도 있음.
  • 배열은 메모리를 연속적으로 사용
    • 만약 범위를 초과한다면 메모리 범위도 초과하므로 다른 변수의 값을 바꿀 수도 있는 것.
    • 이 문제는 별도의 오류 표시가 나지 않을수도 있음.
    • 여럿이 작업하다가 이런 문제가 발생할 수도 있음.

배열 사용 시에는 접근 때 범위를 넘지 않게 유의해야 함.

포인터 연계

  • 배열 뿐만 아니라 클래스, 구조체 등등에서 연계하기 매우 좋음
  • 개념 이해 외에도 직접 사용해봐야함.
  • 프로그래밍에서는 추측, 넘겨짚기 금지.
    반드시 자기가 아는 것을 토대로 사용해야 함.

2️⃣ 구조체 Struct

사용자 정의 자료형

  • 자료형 : 데이터의 형태를 명시한 것. (데이터 타입)
  • 구조체 : 사용자가 데이터의 형태를 명시한 것.

C 스타일 구조체 사용

// 사용자 정의 자료형
typedef struct _tagMyST
{
	int a;
    float f;
}MYST; // 새로운 이름 정의

int main()
{
	MYST t; // 구조체 : 크기는? 8 byte
    int size = sizeof(MYST); // 8
    
    t.a = 1;
    t.f = 10f;
    
    return 0;
}
  • 위 구조체의 크기는? : 8 byte
    • == int (4 byte) + float (4 byte)

구조체 확장

  • 새로운 자료형을 만들더라도 처음에는 기본 자료형의 집합체임.
    이런 새로운 자료형들을 가지고 더 큰 자료형을 만들어 나갈 수 있음.
typedef struct _tagBig
{
	MYST t;
    int i;
    char c;
}BIG;

typedef

typedef 자료형 새_자료형의_이름

  • 자료형에 따라 원하는 새로운 자료형을 선언할 수 있음.
  • 구조체를 선언할 땐 struct 키워드를 자료형으로 사용

struct 키워드

struct _tagMyST
{
	int a;
    float f;
};

struct NewStruct
{
	int a;
    char s;
};

int main()
{
 	// c에서 이렇게 사용하면 오류임
	_tagMyST s;
    NewStruct st;
    
    // 앞에 struct 키워드를 붙여줘야함.
    // 이 키워드를 토대로 묶어서 컴퓨터가 검색함.
    struct _tagMyST s2;
    struct NewStruct st2;
}
  • 근데 이렇게 사용하면 번거로워서 타입을 정의해서 사용하는 것.
typedef struct NewStruct
{
	int a;
    char s;
    
} NEWST; // 새로운 이름 정의

int main()
{
	NEWST a;
    return 0;
}

cpp 스타일 : c 개선

struct _tagMyST
{
	int a;
    float f;
};


typedef struct NewStruct
{
	int a;
    char s;
    
} NEWST; // 새로운 이름 정의

int main()
{
	_tagMyST st; // 이렇게도 가능
	NEWST a;
    NewStruct b;
    
    return 0;
}
  • 변수 선언 시, struct 키워드가 필요하지 않음.

범용 사용

typedef struct NewStruct
{
	int a;
    char s;
    
} NEWST; // 새로운 이름 정의
  • c, c++ 양 쪽에서 범용적으로 사용하기 위해서 여전히 이렇게 선언하고 있음.

초기화

배열 초기화와 유사.

int main()
{
	MYST t = { 1, 3.14f };
}
profile
만성피로 개발자

0개의 댓글