헬퍼 메서드
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 10번째.
지금까지 구조체 데이터를 수정하는 함수(예: player_take_damage)와 단순히 데이터를 표시하는 함수를 살펴보았습니다. 하지만 또 다른 중요한 범주의 함수가 있습니다. 바로 아무것도 변경하지 않고 구조체 멤버에서 파생 값을 계산하는 함수입니다.
너비와 height을 저장하는 Rectangle 구조체를 생각해 보세요. 면적은 저장되지 않고 필요할 때 계산됩니다.
typedef struct {
double width;
double height;
} Rectangle;
double rectangle_area(const Rectangle *self) {
return self->width * self->height;
}
double rectangle_perimeter(const Rectangle *self) {
return 2 * (self->width + self->height);
}
이들은 helper 메서드입니다. 구조체에 기존에 있는 데이터를 사용해 새로운 값을 생성합니다. 쓰기는 하지 않고 읽기만 하므로 const 포인터를 사용한다는 점에 주목하세요. 계산된 결과는 구조체에 저장되는 대신 반환됩니다.
Rectangle box = {5.0, 3.0};
printf("Area: %.1f\n", rectangle_area(&box)); // 15.0
printf("Perimeter: %.1f\n", rectangle_perimeter(&box)); // 16.0
이 패턴은 구조체를 간결하게 유지합니다. 필수 데이터만 저장하고 나머지는 필요할 때 계산합니다. 또한 파생 값이 현재 상태와 항상 일관되도록 보장합니다.
챌린지
쉬움저장된 데이터에서 파생 값을 계산하는 Circle 모듈을 만들어 봅시다. 구조체 멤버를 수정하지 않고 그로부터 results를 계산하는 functions인 helper methods를 작성하는 연습을 하게 됩니다.
세 개의 파일을 만듭니다.
circle.h: 하나의double radiusmember를 가진Circle구조체를 Declare합니다. 또한 두 개의 helper methods를 Declare합니다.circle_area: Circle에 대한constpointer를 받고 Area를 returns합니다.circle_circumference: Circle에 대한constpointer를 받고 Circumference를 returns합니다.
CIRCLE_Hsymbol을 사용하여 include guards를 사용합니다.circle.c: 두 helper methods를 모두 Implement합니다. 계산에는 pi의 값으로3.14159를 사용합니다. Area Formula는pi * radius * radius이고, Circumference Formula는2 * pi * radius입니다. 두 functions 모두 radius만 read해야 하며, 절대 modify해서는 안 됩니다.main.c: Circle을 Create하고 helper methods를 사용하여 해당 속성을 계산하고 표시합니다.
하나의 입력을 받습니다. 바로 원의 radius입니다( double 형식).
main 파일에서 주어진 radius로 Circle을 초기화한 다음, helper methods를 사용하여 Area와 Circumference를 calculate하고 print합니다.
results를 다음 형식으로 Print합니다.
Area: {area}
Circumference: {circumference}두 값 모두에 %.2f를 사용하여 소수점 이하 두 자리까지 표시합니다.
예를 들어 radius가 5.0이면 출력은 다음과 같습니다.
Area: 78.54
Circumference: 31.42직접 해보기
#include <stdio.h>
#include "circle.h"
int main() {
double radius;
scanf("%lf", &radius);
// TODO: 주어진 반지름으로 Circle 구조체를 생성하세요
// TODO: Use circle_area and circle_circumference helper methods
// 결과를 계산하고 출력하기 위해
// 출력 형식:
// printf("Area: %.2f\n", ...);
// printf("Circumference: %.2f\n", ...);
return 0;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러