객체로서의 Struct
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 6번째.
객체 지향 언어에서 객체는 데이터(상태)와 해당 데이터에서 작동하는 함수(메서드)를 하나로 묶는 엔터티입니다. C에는 기본 제공 객체가 없지만, struct와 함수를 사용하여 동일한 개념을 구현할 수 있습니다.
struct를 객체의 "데이터" 부분이라고 생각해 보세요. struct는 상태, 즉 객체가 현재 무엇인지를 정의하는 값을 담고 있습니다:
typedef struct {
int value;
} Counter;
이 Counter struct는 단 하나의 상태인 its current value를 가진 엔터티를 나타냅니다. 여기에 동작을 부여하기 위해 struct를 매개변수로 받는 함수를 작성합니다:
void counter_increment(Counter *c) {
c->value++;
}
int counter_get(Counter *c) {
return c->value;
}
이 함수들은 메서드처럼 작동합니다. 이 함수들은 Counter 데이터를 대상으로 특별히 작업합니다. 구조체를 함수에 전달함으로써, 다른 언어에서 counter.increment()를 호출할 때 자동으로 수행되는 동작을 시뮬레이션합니다.
int main() {
Counter my_counter = {0};
counter_increment(&my_counter);
printf("%d\n", counter_get(&my_counter)); // 출력: 1
return 0;
}
typename_action(예: counter_increment) 명명 규칙은 코드를 체계적으로 구성하고 함수가 어떤 struct에 속하는지 명확하게 보여 줍니다. 이 패턴은 C에서 객체 지향 프로그래밍의 기초입니다.
챌린지
쉬움동작을 포함하는 객체로 struct를 다루는 간단한 Counter 모듈을 만들어 보겠습니다. 데이터를 해당 데이터에 대해 작업을 수행하는 함수와 함께 묶는 패턴을 연습할 수 있도록 코드를 세 개의 파일로 구성합니다.
세 개의 파일을 만듭니다.
counter.h: 단일int valuemember가 있는Counterstruct를 Declare하는 header file입니다. 또한 counter의 "메서드" 역할을 하는 두 함수를 Declare합니다.counter_increment는 Counter를 가리키는 pointer를 takes하며 해당 값이 1 increases되도록 하고,counter_get은 Counter를 가리키는 pointer를 takes하며 현재 값을 returns합니다.COUNTER_Hsymbol을 사용하여 include guards를 사용합니다.counter.c: 두 함수를 모두 Define하는 source file입니다. header file을 include해야 한다는 점을 기억하세요.main.c: Counter를 Create하고, 이에 대해 작업을 수행하며, result를 표시하는 main file입니다.
두 개의 정수 입력을 받습니다. 하나는 counter의 starting value이고, 다른 하나는 이를 증가시킬 times입니다.
main file에서 starting value로 Counter를 initialize한 다음, counter_increment를 specified number of times만큼 Call합니다. 마지막으로 counter_get을 using하여 final value를 retrieve하고 print합니다.
result를 다음 format으로 Print합니다.
Final value: {result}예를 들어 starting value가 5이고 3번 increases하는 경우 output은 다음과 같습니다.
Final value: 8직접 해보기
#include <stdio.h>
#include "counter.h"
int main() {
// 입력 읽기
int starting_value;
int num_increments;
scanf("%d", &starting_value);
scanf("%d", &num_increments);
// TODO: Counter를 생성하고 starting_value로 초기화하세요
// TODO: 지정된 횟수만큼 counter_increment를 호출하세요
// TODO: counter_get을 사용하여 최종 값을 가져와 출력하세요
// 출력 형식: "Final value: {result}"
return 0;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러