[c언어] C 언어에서의 설계 패턴과 객체 지향 프로그래밍
C 언어는 고성능 및 시스템 프로그래밍 언어로 많은 방법론과 설계 패턴을 사용할 수 있으며, 객체 지향적인 개념을 일부 구현할 수도 있습니다.
1. 객체 지향 프로그래밍의 개념
객체 지향 프로그래밍은 클래스, 객체, 상속, 다형성 등의 개념을 기반으로 합니다. C 언어에서는 이러한 개념을 직접적으로 지원하지 않지만, 구조체(struct) 와 포인터를 활용하여 객체 지향 프로그래밍의 일부를 구현할 수 있습니다.
2. C 언어에서의 객체 지향적 설계 패턴
2.1. 캡슐화
C 언어에서 캡슐화는 구조체와 함수 포인터를 사용하여 객체와 그 객체에 대한 함수들을 캡슐화할 수 있습니다. 예를 들어:
typedef struct {
int data;
void (*setData)(int data);
int (*getData)();
} Encapsulation;
void set(Encapsulation *obj, int data) {
obj->data = data;
}
int get(Encapsulation *obj) {
return obj->data;
}
2.2. 상속
C 언어에서 상속은 구조체를 이용하여 부분적으로 구현할 수 있습니다. 예를 들어:
typedef struct {
int length;
int width;
} Rectangle;
typedef struct {
Rectangle rect;
int height;
} Box;
2.3. 다형성
C 언어에서 다형성은 함수 포인터를 사용하여 구현할 수 있습니다. 예를 들어:
typedef struct {
int (*area)();
} Shape;
int calculateAreaOfRect() {
// Calculate area of rectangle
}
int calculateAreaOfCircle() {
// Calculate area of circle
}
int main() {
Shape *shapes[2];
shapes[0]->area = &calculateAreaOfRect;
shapes[1]->area = &calculateAreaOfCircle;
}
3. 결론
C 언어에서는 몇 가지 제한 사항이 있지만, 구조체와 포인터를 활용하여 객체 지향 프로그래밍과 유사한 패턴을 구현할 수 있습니다. 이러한 패턴들은 C 언어를 사용하여 복잡한 시스템을 개발할 때 유용할 수 있습니다.
참고: GeeksforGeeks - Object Oriented Programming in C