Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 'struct'와 'typedef struct'의 차이점 완벽 정리

C 언어와 C++ 언어에서 구조체를 선언하고 사용하는 방식에는 미묘하지만 중요한 차이가 있습니다. 이 글에서는 structtypedef struct의 차이점을 C와 C++ 관점에서 각각 살펴보겠습니다.

C 언어에서의 차이점

기본적으로 struct 키워드는 구조체(structure)를 정의하는 데 사용됩니다. 하지만 C 언어에서는 정의한 구조체를 실제로 사용할 때마다 struct 키워드를 반복해서 붙여야 한다는 번거로움이 있습니다.

struct Point {
    int x;
    int y;
};

struct Point p1;  // C에서는 struct 키워드가 필수

이때 typedef 키워드를 사용하면 구조체에 새로운 별칭(alias)을 부여할 수 있습니다. 별칭을 만들어 두면 이후에는 struct 키워드 없이 그 이름만으로 구조체 변수를 선언할 수 있어 코드가 훨씬 간결해집니다.

typedef struct Point {
    int x;
    int y;
} Point;

Point p2;  // typedef 덕분에 struct 키워드 없이 사용 가능

C++에서는 차이가 없다?

C++에서는 structtypedef struct 사이에 실질적인 차이가 없습니다. 그 이유는 C++에서 모든 struct, union, enum, class 선언이 마치 암시적으로 typedef된 것처럼 동작하기 때문입니다. 즉, 타입 이름을 선언하는 순간 해당 이름만으로 바로 타입을 사용할 수 있습니다.

struct Point {
    int x;
    int y;
};

Point p3;  // C++에서는 struct 키워드 없이 바로 사용 가능

단, 한 가지 예외적인 상황이 있습니다. 같은 이름을 가진 다른 선언(예: 변수나 함수)이 타입 이름을 가리는 경우(name hiding)에는 스코프 해결 연산자 등으로 명확히 구분해 주어야 합니다.

주의해야 할 미묘한 차이: 전방 선언(forward declaration)

두 방식 사이에는 하나의 미묘한 차이점이 존재합니다. 바로 typedef는 전방 선언(forward declaration)이 불가능하다는 점입니다.

따라서 typedef 방식을 선택했다면, 해당 typedef가 포함된 헤더 파일을 사용 지점보다 먼저 반드시 포함(include)해야 합니다. 반면 일반 구조체 선언은 전방 선언이 가능하므로, 대규모 프로젝트에서 컴파일 시간과 의존성 관리 측면에서 이 차이를 고려하는 것이 좋습니다.

정리

  • C 언어: struct 키워드를 매번 작성해야 하므로, typedef로 별칭을 만들어 사용하는 것이 편리합니다.
  • C++ 언어: 구조체·클래스·열거형 선언이 암시적으로 typedef된 것처럼 동작하므로 두 방식에 실질적 차이가 없습니다.
  • 전방 선언: typedef는 전방 선언이 불가능하므로, 필요한 경우 typedef가 담긴 파일을 먼저 포함해야 합니다.