Class의 개념

2023. 11. 30. 16:16·내배캠/C++

Class의 개념

구조체는 (변수/ 배열)을 묶은 하나의 타입을 만드는 것이다.

클래스는 여기서 (변수/배열 그리고 함수)까지 묶어 하나의 타입을 만든 것이라고 보면 된다.

 

클래스를 쓰는 이유

클래스를 쓰는 이유는 여러가지가 있겠지만 가장 큰 장점은 마치 차량의 부품처럼 재활용성이 좋은 것이다.

다른 프로젝트에서 만들어진 클래스를 가져와 클래스 내부를 깊게 이해하지 않고도 변수 선언 후에 바로 사용할수 있다.

c++에서는 대부분 클래스 단위로 library가 만들어져 있다.

#include <iostream>
#include <string>

using namespace std;

class CarInformation
{
public:
	string carCompany; //클래스 안에 있는 변수들은 멤버변수 혹은 필드(Field)라고 한다.
	string carName;
	string color;
	int modelYear;
	int km;

	void print() //클래스 안에 있는 함수들은 매서드 혹은 멤버함수라고 한다.
	{
		cout << "company: " << carCompany << endl;
		cout << "carName: " << carName << endl;
		cout << "color: " << color << endl;
		cout << "modelYear: " << modelYear << "year\n";
		cout << "totalKm: " << km << "km\n";
	}

};

int main()
{
	CarInformation a; //클래스 변수인 a와 b는 인스턴스(instance) 혹은 오브젝트/객체이다.
	CarInformation b;

	a.carCompany = "hyundai";
	a.carName = "genesis gv70";
	a.color = "white";
	a.modelYear = 21;
	a.km = 2500;
	
	a.print();

	cout << "\n\n";

	b.carCompany = "kia";
	b.carName = "sportage";
	b.color = "black";
	b.modelYear = 23;
	b.km = 350;
	
	b.print();
	

	return 0;
}

 


private와 public 접근 지정자

클래스를 사용할 때, private와 public등 공개 여부를 설정할 수 있다.

기본적으로 클래스의 멤버들은 private로 설정되어있다.

 

  • private : 비공개 멤버, 클래스 내에서만 접근 가능
  • public : 공개 멤버, 클래스 외부에서도 접근 가능

위 예제 코드를 보았을 때, main() 함수는 CarInformation의 멤버가 아님으로 public으로 멤버 변수를 공개로 설정한 것이다.

 

그렇다면 클래스에 있는 모든 멤버들을 public으로 설정하면 되는 것 아닌가 하는 생각이 들 수 있으나,

private와 public으로 구분하는 이유가 있다.

 

 가장 큰 이유는 잘못된 사용으로 인한 버그를 막을 수 있다.(안정성 확보)

클래스를 쓰는 대표적인 이유는 재사용성인데, 공개되어있는 클래스 맴버 변수들을 건들였을 때 버그가 발생한다면 안정성이 떨어지기 때문에 재사용성이 떨어진다고 볼 수 있다. 그래서 멤버 변수는 비공개로 하고, 멤버 함수는 공개하는 것이 일반적이다.

 

위 코드의 멤버 변수를 private로 두고, 멤버 함수를 public으로 지정한 것이다.

#include <iostream>
#include <string>

using namespace std;

class CarInformation
{
	string carCompany;
	string carName;
	string color;
	int modelYear;
	int km;

public:

	void setData(string in_company, string in_name, string in_color, int in_year, int in_km)
	{
		carCompany = in_company;
		carName = in_name;
		color = in_color;
		modelYear = in_year;
		km = in_km;
	}
	void print()
	{
		cout << "company: " << carCompany << endl;
		cout << "carName: " << carName << endl;
		cout << "color: " << color << endl;
		cout << "modelYear: " << modelYear << "year\n";
		cout << "totalKm: " << km << "km\n";
	}

};

int main()
{
	CarInformation a;
	CarInformation b;

	a.setData("hyundai", "genesis gv70", "white", 21, 2500);
	a.print();

	cout << "\n\n";

	b.setData("kia", "sportage", "black", 23, 350);
	b.print();
	

	return 0;
}

 

'내배캠 > C++' 카테고리의 다른 글

Class  (0) 2024.12.23
set 과 unordered_set  (0) 2024.12.22
Key-Value 자료구조  (0) 2024.12.21
Binary_Search  (0) 2024.12.16
SQL  (0) 2024.12.02
'내배캠/C++' 카테고리의 다른 글
  • set 과 unordered_set
  • Key-Value 자료구조
  • Binary_Search
  • SQL
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    Class의 개념
    상단으로

    티스토리툴바