[c언어] 클래스와 객체

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 구조체를 사용하여 getAgesetAge 메서드를 객체에 추가했습니다. 이후에는 해당 메서드를 호출하여 객체의 상태를 변경하거나 조회할 수 있습니다.

이러한 방식으로 C언어에서도 클래스와 객체를 모방하여 객체 지향적인 프로그래밍을 할 수 있습니다.

결론

C언어는 객체 지향 프로그래밍을 직접적으로 지원하지 않지만, 구조체와 포인터를 활용하여 클래스와 객체를 모방할 수 있습니다. 이를 통해 객체 지향적인 설계를 구현할 수 있으며, 소프트웨어를 더 모듈화하고 유지보수하기 쉽게 만들 수 있습니다.

이러한 방법을 사용하여 C언어로 객체 지향적인 프로그래밍을 할 수 있으며, 이를 통해 좀 더 유연하고 효율적인 코드를 작성할 수 있습니다.

[참고 자료]