Menu
Coddy logo textTech

생성자 패턴

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 12번째.

Java나 C++와 같은 언어에서는 생성자를 사용하여 객체를 만듭니다. 생성자는 memory를 자동으로 할당하고 field를 초기화하는 특수한 function입니다. C에는 이러한 기능이 없지만, 간단한 패턴인 create_ function으로 이를 흉내 낼 수 있습니다.

C에서 생성자 function은 일반적으로 세 가지 작업을 수행합니다. malloc으로 memory를 할당하고, 모든 field를 적절한 값으로 초기화하며, 새 객체에 대한 pointer를 return합니다:

typedef struct {
    char *name;
    int age;
} Person;

Person *create_person(const char *name, int age) {
    Person *p = malloc(sizeof(Person));
    p->name = malloc(strlen(name) + 1);
    strcpy(p->name, name);
    p->age = age;
    return p;
}

function은 객체가 stack이 아닌 heap에 존재하기 때문에 pointer를 반환합니다. 이는 function이 return한 후에도 객체가 유지되며 자유롭게 전달될 수 있음을 의미합니다. 호출자는 이를 다음과 같이 사용합니다:

Person *alice = create_person("Alice", 30);
printf("%s is %d years old\n", alice->name, alice->age);

생성자가 구조체를 할당하고, 문자열을 위한 공간을 할당하며, 데이터를 복사하는 등 모든 복잡한 세부 사항을 처리하는 방식을 주목하세요. 호출자는 초기 값만 제공하고 바로 사용할 수 있는 객체를 받습니다. 이렇게 하면 생성 로직이 한곳에 캡슐화되어 코드가 더 깔끔하고 오류가 발생할 가능성도 줄어듭니다.

challenge icon

챌린지

쉬움

힙에 책 객체를 생성하는 생성자 패턴을 사용하는 Book 모듈을 만들어 보겠습니다. 모든 memory Allocate 및 초기화를 처리하고 바로 사용할 수 있는 pointerreturn하는 create_ function을 작성하는 연습을 하게 됩니다.

세 개의 파일을 만듭니다:

  • book.h: 두 멤버를 가진 Book 구조체를 Declare합니다: char *title(dynamically 할당된 문자열을 가리키는 pointer) 및 int pages입니다. 제목 문자열과 page 수를 받아 새로 생성된 Book을 가리키는 pointer를 return하는 생성자 create_book function도 Declare합니다. 기호 BOOK_H를 사용하여 include guards를 적용합니다.
  • book.c: create_book function을 Implement합니다. 생성자는 먼저 Book 구조체 자체에 대한 memory를 Allocate한 다음, title 문자열을 위한 별도의 memory를 Allocate해야 합니다(null 종결 문자를 위한 공간도 고려해야 합니다). title을 새 memory로 Copy하고, pages field를 설정한 다음, 새 Book을 가리키는 pointer를 return합니다.
  • main.c: 생성자를 사용하여 책을 만들고 해당 information을 표시합니다.

두 가지 입력을 받습니다: book title(문자열)과 number of pages(정수)입니다.

main 파일에서 create_book을 사용하여 provided 값으로 새 책을 만든 다음, 다음 format으로 해당 information을 Print합니다:

Title: {title}
Pages: {pages}

예를 들어 입력이 The C Programming Language272인 경우 출력은 다음과 같습니다:

Title: The C Programming Language
Pages: 272

생성자가 모든 생성 로직을 캡슐화한다는 점을 remember하세요. 호출자는 단순히 초기 값을 제공하고 바로 사용할 수 있도록 완전히 초기화된 객체를 받습니다.

REQUIRED OUTPUT FORMAT: [Your translated content here]

직접 해보기

#include <stdio.h>
#include <stdlib.h>
#include "book.h"

int main() {
    char title[256];
    int pages;
    
    // 입력 읽기
    fgets(title, sizeof(title), stdin);
    // 개행 문자가 있으면 제거
    for (int i = 0; title[i]; i++) {
        if (title[i] == '\n') {
            title[i] = '\0';
            break;
        }
    }
    scanf("%d", &pages);
    
    // TODO: create_book을 사용하여 제공된 값으로 새 책을 생성하세요
    
    // TODO: 필요한 형식으로 책 정보를 출력하세요:
    // Title: {title}
    // Pages: {pages}
    
    // TODO: 완료 후 할당된 메모리를 해제하는 것을 잊지 마세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러