[Programming Basic] 구조체

양영준·2026년 2월 24일

Programming Basic

목록 보기
5/6
post-thumbnail

📌 구조체 (structure)

구조체 (structure)는 포인터 변수, 배열 등을 포함한 하나 이상의 변수를 하나로 묶을 수 있는 복합 자료형이다.
기본 자료형 변수를 묶어서 새로운 자료형을 만든 것이므로 "사용자 정의 자료형"이라고 한다.
다양한 형태의 데이터를 처리할 때 사용한다.
구조체 안에 함수를 넣고 함수에 구조체 멤버 변수들을 활용할 수도 있다.

💡 배열과의 차이점

배열과 구조체 모두 여러 개의 자료형을 하나로 묶을 수 있다.
그러나 배열은 동일한 자료형만 하나로 묶을 수 있지만 구조체는 두 개 이상의 다양한 자료형을 하나로 묶을 수 있다는 점에서 차이가 있다.

💡 클래스와의 차이점

구조체도 클래스와 마찬가지로 함수를 멤버로 가질 수 있기 때문에 클래스처럼 사용 가능하지만 클래스와의 차이점이 존재한다.

1. 기본 접근 지시자가 다르다.

클래스의 기본 접근 지시자는 private , 구조체의 기본 접근 지시자는 public 이다.

2. 할당되는 메모리 영역이 다르다.

클래스는 힙 (Heap) 영역에 할당되고, 구조체는 스택 (stack) 영역에 할당된다.
따라서 클래스는 메모리 크기에 좀 더 자유로운 대신 가비지 컬렉션에 영향을 받는다.
반면 구조체는 가비지 컬렉션에 영향을 받지 않기 때문에 성능 면에서 상대적으로 이점이 있지만 메모리 크기가 한정적이다.

3. 클래스는 참조 타입 (Reference Type) 이고 구조체는 값 타입 (Value Type) 이다.

클래스는 참조 타입 (Reference Type)이기 때문에 객체를 전달했을 때 그 객체는 항상 원본과 동일하다.
즉, 함수의 매개 변수로 전달되었을 때 내부 변수가 변경되면 함수가 종료되더라도 변경점은 그대로 유지된다.

그러나 구조체는 값 타입 (Value Type)이기 때문에 함수의 매개 변수로 전달되어도 복사된 객체의 변수만 변경될 뿐 원본은 영향받지 않는다.

4. 구조체는 상속이 불가능하다.

💡 구조체의 구성 요소

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 tag) : 선언된 구조체를 구별하기 위한 식별자
  • 구조체 이름 (struct name) : 구조체의 인스턴스(instance)를 만들기 위한 식별자
    구조체 태그와 구조체 이름은 원래 다른 것을 지칭하지만 일반적으로 동일하게 취급한다.
  • 인스턴스 (instance) : 실제로 메모리를 할당하여 생성된 구조체 객체
  • 멤버 접근 연산자 (*) : 구조체의 멤버에 접근하기 위한 연산자
    도트 연산자 (dot operator)라고도 한다.

📌 typedef

기존 타입의 새로운 이름을 지정할 때 사용한다.
위 예시의 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#] 구조체와 클래스 차이

profile
학습 내용 정리 순차적 갱신 / 정리 중

0개의 댓글