C언어는 객체 지향 프로그래밍을 지원하지는 않지만, 구조체(structure)와 포인터(pointer)를 사용하여 비슷한 개념을 구현할 수 있습니다. 이 포스트에서는 C언어에서 클래스와 객체를 모방하는 방법을 알아보겠습니다.
구조체(structure)로 클래스 구현하기
C언어에서 클래스를 모방하기 위해 구조체를 사용할 수 있습니다. 구조체는 변수들을 묶어서 하나의 자료형으로 정의하는데 사용됩니다.
typedef struct {
int age;
char name[20];
} Person;
위 코드에서 Person
이라는 구조체를 정의했습니다. 이제 이를 사용하여 객체를 생성할 수 있습니다.
포인터를 사용하여 객체 생성하기
구조체 포인터를 사용하여 객체를 동적으로 생성할 수 있습니다.
Person* createPerson(int age, char* name) {
Person* p = (Person*)malloc(sizeof(Person));
p->age = age;
strcpy(p->name, name);
return p;
}
void destroyPerson(Person* p) {
free(p);
}
createPerson
함수를 사용하여 새로운 Person
객체를 생성하고, destroyPerson
함수를 사용하여 메모리 누수를 방지하기 위해 객체를 제거할 수 있습니다.
함수 포인터를 활용하여 메서드 구현하기
C언어에서는 함수 포인터를 활용하여 객체의 메서드를 모방할 수 있습니다.
typedef struct {
int (*getAge)(Person*);
void (*setAge)(Person*, int);
} PersonFuncs;
int getAge(Person* p) {
return p->age;
}
void setAge(Person* p, int age) {
p->age = age;
}
PersonFuncs pFuncs = {getAge, setAge};
// 사용 예시
Person* p = createPerson(25, "John");
pFuncs.setAge(p, 30);
int age = pFuncs.getAge(p);
위 코드에서 PersonFuncs
구조체를 사용하여 getAge
와 setAge
메서드를 객체에 추가했습니다. 이후에는 해당 메서드를 호출하여 객체의 상태를 변경하거나 조회할 수 있습니다.
이러한 방식으로 C언어에서도 클래스와 객체를 모방하여 객체 지향적인 프로그래밍을 할 수 있습니다.
결론
C언어는 객체 지향 프로그래밍을 직접적으로 지원하지 않지만, 구조체와 포인터를 활용하여 클래스와 객체를 모방할 수 있습니다. 이를 통해 객체 지향적인 설계를 구현할 수 있으며, 소프트웨어를 더 모듈화하고 유지보수하기 쉽게 만들 수 있습니다.
이러한 방법을 사용하여 C언어로 객체 지향적인 프로그래밍을 할 수 있으며, 이를 통해 좀 더 유연하고 효율적인 코드를 작성할 수 있습니다.
[참고 자료]
- https://www.geeksforgeeks.org/classes-and-objects-in-c/
- https://www.programiz.com/c-programming/c-structures-pointers