좋은 아키텍처를 만드는 일은 객체 지향 ㅇㅇ설계 원칙을 이해하고 응용하는 데서 출발한다.
객체는 내부 데이터를 숨기고, 외부에는 필요한 동작만을 노출한다.
// point.h
// 구조체의 실제 멤버는 감추고, 포인터 타입만 선언
struct Point;
// 인터페이스 함수 선언 (외부에서 사용할 수 있는 함수들)
// Point 생성 함수
struct Point* makePoint(double x, double y);
// 거리 계산 함수
double distance(struct Point* p1, struct Point* p2);
// point.c (실제 구현 부분)
#include "point.h"
#include <stdlib.h>
#include <math.h>
// 내부 구현: Point 구조체 정의 (외부에는 노출되지 않음)
struct Point {
double x, y;
};
// Point 구조체 포인터를 생성하고 초기화하는 함수
struct Point* makePoint(double x, double y) {
struct Point* p = malloc(sizeof(struct Point));
p->x = x;
p->y = y;
return p;
}
// 두 점 사이의 거리 계산 함수
double distance(struct Point* p1, struct Point* p2) {
double dx = p1->x - p2->x;
double dy = p1->y - p2->y;
return sqrt(dx*dx + dy*dy);
}