더북(TheBook)

연결 리스트를 구현하기 위해서는 자기 참조를 할 수 있어야 하고 자기 참조 구조체를 사용해야 합니다. 자기 참조란 마치 기차의 객차가 연결된 것처럼 ‘자기 자신과 같이 생긴 것을 참조한다’고 생각하면 됩니다. 여기서 ‘참조한다’는 말은 ‘가리킨다’는 의미로 해석할 수 있습니다. 어디서 많이 들어본 것 같죠? 그렇습니다. 이는 곧 포인터를 통해서 구현됩니다.

자기 참조 구조체도 마찬가지로 구조체입니다. 자기 참조 구조체는 자기 자신과 같은 형태의 구조체를 가리킬 수 있다는 의미입니다. 자기 참조 구조체는 물론 여러 다양한 자료형을 담을 수 있지만, 자신과 같은 자료형을 가리키는 포인터 변수가 있어야 합니다.

이 포인터 변수를 통해 자신과 같이 생긴 자료형을 가리킬 수 있게 됩니다. 즉, 구조체의 멤버 변수로 자기 자신과 같은 구조체의 포인터 변수를 갖는 구조체를 ‘자기 참조 구조체’라고 합니다.

코드 수준에서 자기 참조 구조체를 선언하고 어떻게 사용되는지 차례대로 알아봅시다.

먼저 자기 참조 구조체를 정의합니다. 자기 참조 구조체 abc는 다음과 같이 멤버 변수 두 개를 가집니다. 하나는 정수형 변수 data이고 두 번째는 자신과 같은 구조체의 포인터 변수입니다.

struct abc {
    int data;         // 정수형 변수 
    struct abc *next; // 자기 참조를 위한 포인터 변수 선언
};
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.