class 와 instance

😎·2022년 11월 24일
0

CPP

목록 보기
3/46

클래스

C++에서 클래스(class)구조체의 상위 호환이다. C++의 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 확장된 의미를 가진다.

이러한 클래스를 가지고 객체 지향 프로그램을 작성할 수 있다.

클래스의 구성

  • 멤버 변수프로퍼티(property)
  • 멤버 함수메소드(method)

↘︎ 클래스 선언

class Sample {

public:
    Sample(void);
    ~Sample(void);
};

class

  • class 를 선언하고 클래스 이름 입력
  • 생성자와 소멸자가 필요
  • 첫문자는 대문자

생성자

C++에서는 객체의 생성과 동시에 멤버 변수를 초기화해주는 생성자(constructor)라는 멤버 함수를 제공한다.

  • 인스턴스 생성

  • 초기화를 위한 데이터를 인수로 전달받을 수 있음

  • 생성자는 반환값이 없지만, void형으로 선언하지 않음

  • 객체 초기화 방법이 여러 개 존재할 경우,
    오버로딩 규칙에 따라 여러 개의 생성자를 가질 수 있음


소멸자

C++에서 생성자는 객체 멤버의 초기화뿐만 아니라, 객체를 사용하기 위한 외부 환경까지도 초기화하는 역할을 한다.
-> 외부 환경이 어떤 걸 이야기하는지 잘 모르겠음.

따라서 객체의 수명이 끝나면 생성자의 반대 역할을 수행할 멤버 함수도 필요하다. 이를 소멸자(destructor)라고 한다.

소멸자는 객체의 수명이 끝나면 컴파일러에 의해 자동으로 호출되며, 사용이 끝난 객체를 정리한다.

  • 인스턴스 파괴

  • 매개변수는 없음

  • 소멸자는 반환값이 없지만 void형으로 선언하지 않음

  • 생성자와 다르게, 소멸자는 단 하나만 가질 수 있음

  • 소멸자는 const, volatile 또는 static으로 선언될 수는 없지만,
    const, volatile 또는 static으로 선언된 객체의 소멸을 위해서 호출될 수는 있습니다. (이건 잘 모르겠음)


반환값

c++ 의 생성자와 소멸자는 반환값 타입이 없다. 없더라도 사용할 때는 return ; 입력한다. 생성자와 소멸자 안에서 할 일을 다 했다는 의미로 사용한다.


인스턴스

C++에서 클래스는 구조체와 마찬가지로 사용자가 정의할 수 있는 일종의 타입이며, 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체를 선언해야 한다.
( 위에서 봤던 Sample 클래스 선언 )

선언된 클래스 타입의 객체를 인스턴스(instance)라고 하며, 메모리에 대입된 객체를 의미한다.

인스턴스의 특징

  • 하나의 클래스에서 여러 개의 인스턴스를 생성할 수 있음

  • 독립된 메모리 공간에 저장된 자신만의 멤버 변수를 가짐.

  • 멤버 함수는 모든 인스턴스가 공유


↘︎ 인스턴스의 선언

Sample 클래스의 인스턴스로 instance 를 만들었다.

int main() {
	Sample instance;

	return 0;
}

클래스와 인스턴스 차이

  • 클래스는 정적인 부분이다.
    ex. 붕어빵 틀
  • 인스턴스는 동적인 부분이다.
    ex. 팥 붕어빵, 슈크림 붕어빵, 초콜릿 붕어빵 등 다양한 인스턴스 생성 가능

코드

  • main.c
#include "Sample.class.hpp"

int main() {
    Sample instance;
    return (0);
}
  • Sample.class.cpp
#include <iostream>
#include "Sample.class.hpp"

Sample::Sample(void) {
    std::cout << "Constructor called" << std::endl;
    return ;
}

Sample::~Sample(void) {
    std::cout << "Destructor called" << std::endl;
    return ;
}
  • Sample.class.hpp
#ifndef SAMPLE_CLASS_H
# define SAMPLE_CLASS_H

class Sample {

public:
    Sample(void);
    ~Sample(void);
};

#endif

참고 자료

profile
jaekim

0개의 댓글