Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 구조체(struct) 생성자 완벽 이해하기: 개념, 문법, 실전 활용법

C++ 구조체(struct) 생성자 완벽 이해하기: 개념, 문법, 실전 활용법

생성자(Constructor)는 클래스 타입 객체나 구조체를 초기화하는 데 사용되는 필수 멤버 함수입니다. 다른 프로그래밍 언어와 마찬가지로 C++에서도 생성자가 사용되며, 구조체가 초기화되지 않은 상태나 정의되지 않은 동작을 피할 수 있도록 특정 방식으로 객체를 생성하는 데 활용됩니다.

이 가이드에서는 다음 내용을 다룹니다:

  • C++에서 "struct" 생성자란 무엇인가?
  • C++에서 생성자를 정의할 때 알아야 할 핵심 사항
  • C++ "struct" 생성자의 문법
  • C++ "struct" 생성자의 동작 방식
  • C++ 기본(default) "struct" 생성자
  • C++ 매개변수가 있는 "struct" 생성자
  • C++에서 구조체 생성자 포인터를 만드는 방법
  • 마무리

C++에서 구조체(struct) 생성자란?

C++에서 "struct"는 구조체를 의미하며, 구조체 내부에 정의되는 특별한 멤버 함수입니다. 구조체 생성자는 멤버 변수들을 초기화하고, 서로 다른 데이터 타입으로 이루어진 변수 그룹을 한곳에 모아 새롭게 정의할 수 있도록 도와줍니다. 쉽게 말해, "struct" 생성자는 사용자가 클래스의 객체를 선언할 때마다 자동으로 호출되는 특별한 메서드라고 할 수 있습니다.

C++에서 생성자를 정의할 때 알아야 할 핵심 사항

C++에서 생성자를 정의할 때 기억해야 할 핵심 포인트는 다음과 같습니다:

  • 생성자의 이름은 항상 자신이 속한 클래스의 이름과 같아야 합니다.
  • 사용자가 생성자를 직접 정의하지 않으면 컴파일러가 기본 생성자를 자동으로 생성합니다.
  • 생성자는 입출력 연산이 아니라 초기화를 위해 사용됩니다.
  • new 연산자를 통해 런타임에 메모리를 할당하는 데 활용됩니다.
  • virtual이나 static으로 선언할 수 없습니다.
  • 여러 개의 생성자를 선언할 수 있습니다(오버로딩 가능).

C++ "struct" 생성자의 문법

구조체 생성자의 일반적인 문법을 살펴보겠습니다:

struct Structure-Name{
    d_type variable1;
    d_type variable2;
    ........

    //매개변수 없는 생성자
    Structure-Name()
    {
        //코드
    }

    //매개변수가 있는 생성자
    Structure-Name(d_type variable1, d_type variable2,..)
    {
        //코드
    }
};

위 문법에서 각 요소의 의미는 다음과 같습니다:

  • "Structure-Name"은 사용자가 원하는 구조체 이름으로 대체되며, "struct" 키워드로 정의합니다.
  • "d_type variable1"은 서로 다른 데이터 타입을 가진 변수 이름을 나타냅니다.
  • "Structure-Name()"은 매개변수가 없는 생성자를 정의한 형태입니다.
  • "Structure-Name(d_type variable1,…)"처럼 매개변수가 있는 생성자의 문법도 함께 정의되어 있습니다.

참고: C++에서 "struct" 선언은 클래스(class) 선언과 동일한 방식으로 작동합니다.

C++ "struct" 생성자의 동작 방식

C++에서는 필요에 따라 매개변수가 있거나 없는 구조체 생성자를 자유롭게 사용할 수 있습니다. 더 나은 이해를 위해 다음 코드 예제를 살펴보겠습니다.

C++에서 기본(default) 구조체 생성자 만들기

C++에서 기본 구조체 생성자를 만들려면 다음 코드 블록을 확인해 보세요:

#include <iostream>
using namespace std;

struct folk{
   string name;
   float height;
   int age;

folk(){
   name= "David";
   height = 6.7;
   age = 26;
   cout<<"Name: "<<name<<endl<<"Height: "<<height<<endl<<"Age: "<<age<<endl;
    }
};

int main()
{
   folk();
}

위 코드 블록의 동작을 단계별로 살펴보면:

  • 먼저 헤더 파일로 입출력 스트림 라이브러리인 "#include <iostream>"을 추가했습니다.
  • 다음으로 "using namespace std"를 사용해 표준 라이브러리 식별자를 접두사 없이 사용할 수 있도록 했습니다.
  • 그런 다음 서로 다른 데이터 타입을 가진 세 개의 멤버를 가진 "folk" 구조체를 만들었습니다. 각각 문자열 타입의 "name", float 타입의 "height", 정수 타입의 "age"입니다.
  • 이후 구조체의 생성자를 추가하고 멤버들을 해당 값으로 초기화했습니다. 생성자 본문 안에서 folk 구조체의 데이터를 정의하고 "cout" 문을 사용해 결과를 콘솔에 출력했습니다.

실행 결과:

Name: David
Height: 6.7
Age: 26

C++에서 매개변수가 있는 구조체 생성자 만들기

C++에서 매개변수가 있는 생성자를 만들려면 아래 코드를 참고해 보세요:

#include <iostream>
using namespace std;

struct folk{
   string name;
   float height;
   int age;

folk(string x, float y, int z){
   name = x;
   height = y;
   age = z;
   }
};

int main()
{
    folk f1("Ayzel", 5.1, 23);
    cout<<"Name: " <<f1.name<<endl<<"Height: "<<f1.height<<endl<<"Age: "<<f1.age<<endl;
}

위 코드에 대한 설명:

  • 앞서 살펴본 예제를 확장하여 변수와 해당 데이터 타입을 생성자의 매개변수로 전달했습니다. 문자열 타입의 "x", float 타입의 "y", 정수 타입의 "z"입니다.
  • 마지막으로 "main()" 함수 안에서 "f1"이라는 객체를 생성하며 값을 전달해 생성자를 호출했습니다. 그런 다음 "cout" 문을 사용해 변수들의 결과값을 콘솔에 출력했습니다.

실행 결과:

Name: Ayzel
Height: 5.1
Age: 23

C++에서 구조체 생성자 포인터를 만드는 방법

포인터(pointer)는 객체의 메모리 주소를 저장하는 데 사용되는 변수입니다. C++에서 포인터는 배열의 요소나 다른 데이터 구조를 순회하는 등 다양한 용도로 활용됩니다. 포인터 변수는 구조체 같은 사용자 정의 타입에 대해서도 만들 수 있습니다. 구조체에 대한 포인터를 만드는 예제를 살펴보겠습니다:

#include <iostream>
#include <cstring>
using namespace std;

struct folk
{
  string name;
  int age;
};

int main(){
      struct folk f = {"Elice ", 28};
      struct folk *ptr;
      ptr = &f;
      cout << f.name << f.age << endl;
      cout << ptr->name << ptr->age << endl;
    return 0;
}

위 코드에 대한 설명:

  • "<iostream>""<cstring>" 헤더 파일을 추가했습니다.
  • 표준 라이브러리 식별자를 사용할 수 있도록 "using namespace std"를 지정했습니다.
  • 다음으로 두 개의 멤버를 가진 "folk" 구조체를 만들었습니다. 문자열 타입의 "name"과 정수 타입의 "age"입니다.
  • 이후 "folk" 구조체를 가리키는 포인터 "ptr"을 선언했습니다.
  • 그런 다음 "f" 구조체 변수를 가리키도록 포인터 "ptr"을 설정했습니다. 이제 "ptr"은 구조체 변수 "f"의 주소를 저장합니다.
  • 마지막으로 "->" 연산자를 사용해 포인터가 가리키는 구조체의 데이터 멤버에 접근했습니다.

위 코드의 실행 결과는 다음과 같습니다:

Elice 28
Elice 28

마무리

C++에서 "struct"는 구조체 내부에 정의되는 특별한 멤버 함수로, 멤버 변수를 초기화하고 서로 다른 데이터 타입으로 이루어진 변수 그룹을 한곳에 모아 정의할 수 있게 해줍니다. 사용자는 매개변수가 있는 생성자와 없는 생성자를 모두 자유롭게 정의할 수 있으며, C++에서는 구조체 같은 사용자 정의 타입에 대해서도 포인터 변수를 만들 수 있습니다. 지금까지 C++ 구조체 생성자의 개념부터 실전 활용법까지 자세히 알아보았습니다.

저자 소개

C++ 구조체(struct) 생성자 완벽 이해하기: 개념, 문법, 실전 활용법

Maria Naz

컴퓨터 과학 석사 학위를 보유하고 있습니다. 새로운 기술을 탐구하고 프로그래밍 언어를 배우는 일에 큰 열정을 가지고 있으며, 자신의 지식을 세상과 나누는 것을 좋아합니다.