
구조체 (structure)는 포인터 변수, 배열 등을 포함한 하나 이상의 변수를 하나로 묶을 수 있는 복합 자료형이다.
기본 자료형 변수를 묶어서 새로운 자료형을 만든 것이므로 "사용자 정의 자료형"이라고 한다.
다양한 형태의 데이터를 처리할 때 사용한다.
구조체 안에 함수를 넣고 함수에 구조체 멤버 변수들을 활용할 수도 있다.
배열과 구조체 모두 여러 개의 자료형을 하나로 묶을 수 있다.
그러나 배열은 동일한 자료형만 하나로 묶을 수 있지만 구조체는 두 개 이상의 다양한 자료형을 하나로 묶을 수 있다는 점에서 차이가 있다.
구조체도 클래스와 마찬가지로 함수를 멤버로 가질 수 있기 때문에 클래스처럼 사용 가능하지만 클래스와의 차이점이 존재한다.
클래스의 기본 접근 지시자는 private , 구조체의 기본 접근 지시자는 public 이다.
클래스는 힙 (Heap) 영역에 할당되고, 구조체는 스택 (stack) 영역에 할당된다.
따라서 클래스는 메모리 크기에 좀 더 자유로운 대신 가비지 컬렉션에 영향을 받는다.
반면 구조체는 가비지 컬렉션에 영향을 받지 않기 때문에 성능 면에서 상대적으로 이점이 있지만 메모리 크기가 한정적이다.
클래스는 참조 타입 (Reference Type)이기 때문에 객체를 전달했을 때 그 객체는 항상 원본과 동일하다.
즉, 함수의 매개 변수로 전달되었을 때 내부 변수가 변경되면 함수가 종료되더라도 변경점은 그대로 유지된다.
그러나 구조체는 값 타입 (Value Type)이기 때문에 함수의 매개 변수로 전달되어도 복사된 객체의 변수만 변경될 뿐 원본은 영향받지 않는다.
struct Person //Person : 구조체 태그
{
string name;
int age;
char gender;
};
void main()
{
//Person 인스턴스를 생성하는 코드
struct Person p; //Person : 구조체 이름, p : 변수 명
//멤버 접근 연산자 (.)를 이용해 Person 구조체의 멤버에 접근
p.name = "Yang";
p.age = 25;
}
기존 타입의 새로운 이름을 지정할 때 사용한다.
위 예시의 struct Person p; 에서 struct 키워드는 생략이 불가능하다.
구조체를 다른 자료형과 동일하게 사용하기 위해 typedef로 새롭게 이름을 지정한다.
typedef를 활용한 구조체 정의 방법은 3가지가 있다.
struct POINT
{
int x;
int y;
}
typedef struct POINT Point;
typedef struct POINT
{
int x;
int y;
} Point;
typedef struct
{
int x;
int y;
}
typedef를 활용해 구조체를 정의하면 sturct Person 대신 간략하게 Person 을 사용해도 동일하게 동작 가능하다.
struct - 위키 백과
C언어 기초 가이드 STEP 2: 사용자 정의 자료형
구조체의 기본
C 프로그래밍 : 현대적 접근 - 구조체형
C++ 구조체 (Struct)
[C#] 구조체와 클래스 차이