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 |