C 언어 vs C++: struct와 typedef의 차이점 정리
C 언어 vs C++: `struct`와 `typedef`의 차이점 완벽 정리
C 언어를 공부하다 보면 struct MyStruct
와 typedef struct MyStruct
라는 두 가지 형태의 구조체 선언을 자주 보게 됩니다. 겉보기에는 비슷해 보이지만, 둘 사이에는 명확한 차이점이 있습니다. 이 글에서는 두 방식의 차이점을 쉽게 알아보고, 왜 C에서는 typedef
가, C++에서는 전자가 더 많이 사용되는지 알려드릴게요.
`struct`만 사용한 구조체 선언
이 코드는 MyStruct
라는 이름의 구조체 태그(tag)를 정의합니다. 여기서 MyStruct
는 구조체의 별명이 아니라, struct
키워드와 함께 사용해야 하는 진짜 이름입니다. 마치 '과일'이라는 카테고리 안에 '사과'라는 물체가 있는 것과 같습니다.
struct MyStruct {
int a;
};
변수 선언 방식: struct MyStruct myVar;
struct
키워드를 매번 써줘야 하는 번거로움이 있습니다.
`typedef`를 사용한 구조체 선언
이 코드는 struct MyStruct
를 정의하는 동시에, MYSTRUCT
라는 새로운 타입 별칭(alias)을 만듭니다. 이제 MYSTRUCT
는 struct MyStruct
와 완전히 동일한 타입으로 취급됩니다.
typedef struct MyStruct {
int a;
} MYSTRUCT;
변수 선언 방식: MYSTRUCT myVar;
typedef
를 사용하면 struct
키워드 없이 더 간결하게 변수를 선언할 수 있습니다.
C 언어와 C++의 `struct` 사용 관행
C 언어
C 언어에서는 구조체 변수를 선언할 때 struct
키워드를 반드시 함께 사용해야 합니다. 이 때문에 typedef
를 사용해 타입 별칭을 만들어 코드를 간결하게 작성하는 것이 일반적인 관행입니다.
// C 언어에서 보편적인 방식
typedef struct {
int x;
int y;
} Point;
Point p1; // struct 키워드 없이 사용
C++ 언어
반면, C++에서는 struct
이름 자체가 이미 타입 이름으로 인식됩니다. 따라서 typedef
를 따로 사용할 필요가 없습니다. 이는 C++의 객체 지향적 특성을 반영한 것으로, 클래스(class)와 동일한 방식으로 struct
를 다루기 위함입니다.
// C++에서 보편적인 방식
struct Point {
int x;
int y;
};
Point p1; // struct 키워드 없이 사용
결론적으로, C++에서는 struct
이름이 바로 타입 이름이 되므로 typedef
를 사용하지 않고 전자의 방식을 주로 사용합니다.
핵심 요약
구분 | C 언어 | C++ 언어 |
---|---|---|
`struct` 사용 | struct MyStruct (구조체 태그) |
struct MyStruct (타입 이름) |
변수 선언 | struct MyStruct myVar; |
MyStruct myVar; |
보편적인 방식 | typedef 를 사용한 타입 별칭 |
typedef 없이 struct 만 사용 |
이제 struct
와 typedef
의 차이를 확실히 아셨기를 바랍니다. C 언어 코드를 작성할 때는 typedef
를 사용해 간결하고 읽기 쉬운 코드를 만들어 보세요!