Menu
Coddy logo textTech

불투명 포인터 개념

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 17번째.

지금까지 헤더 파일에서 struct를 정의하면, 해당 헤더를 포함하는 누구나 모든 멤버를 확인하고 직접 액세스할 수 있습니다. 이는 캡슐화를 위반합니다. 캡슐화란 내부 세부 정보를 외부 코드로부터 숨기는 원칙입니다.

C는 이를 해결하기 위해 불투명 포인터라는 강력한 기법을 제공합니다. 아이디어는 간단합니다. 헤더에서 struct가 존재한다고 선언하되, 그 안에 무엇이 있는지는 공개하지 않는 것입니다. 이는 불완전한 타입을 사용하여 수행합니다:

// wallet.h
typedef struct Wallet Wallet;  // 선언만 있음 - 본문 없음!

Wallet *create_wallet(int initial_balance);
void free_wallet(Wallet *w);

curly 중괄호가 없다는 점에 주목하세요. Wallet에 무엇이 포함되는지는 전혀 정의하지 않습니다. 컴파일러는 해당 타입이 존재한다는 것은 알지만, 그 크기나 멤버는 알지 못합니다. 이는 이 헤더를 포함하는 코드가 Wallet 자체를 직접 사용하는 것이 아니라 포인터만 사용할 수 있다는 의미입니다.

왜 이것이 중요할까요? 실제 struct 정의가 .c 파일 안에 숨겨져 있으므로, 여러분의 헤더를 사용하는 어떤 코드도 w->balance 또는 sizeof(Wallet)를 사용할 수 없습니다. 반드시 여러분이 제공하는 함수를 사용해야 합니다. 데이터에 대한 모든 접근을 제어할 수 있으며, 헤더에 의존하는 어떤 코드도 손상시키지 않고 나중에 내부 구조를 변경할 수 있습니다.

다음 레슨에서는 소스 파일 안에서 실제 struct body를 정의하는 연습을 하며, opaque pointer 패턴을 완성합니다.

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러