IT 프로그래밍/C++

[C++ 따배시 8.1] 객체지향 프로그래밍과 클래스

기술1 2024. 4. 7. 14:19
반응형


클래스를 쓰는 이유

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void print(const string& name, const string& address, const int& age,
	const double& height, const double& weight)
{
	cout << name << " " << address << " " << age << " " << height << " "
		<< weight << endl;
}

int main()
{
	string name;
	string address;
	int age;
	double height;
	double weight;

	print(name, address, age, height, weight);

	vector<string> name_vec;
	vector<string> addr_vec;
	vector<int> age_vec;
	vector<double> height_vec;
	vector<double> weight_vec;

	print(name_vec[0], addr_vec[0], age_vec[0], height_vec[0], weight_vec[0]);

	return 0;
}

먼저 구조체 같은 타입을 쓰지 않았을 때 각각을 출력하는 것입니다. 저희는 이름, 주소, 나이, 키, 몸무게를 알고 싶을 때 한 사람마다 이렇게 번거로운 작업을 해야합니다. 

 

그럼 구조체로 만들면 어떻게 될까요?

#include <iostream>
#include <string>
#include <vector>
using namespace std;


struct Friend
{
	string name;
	string address;
	int age;
	double height;
	double weight;
};

void print(const string& name, const string& address, const int& age,
	const double& height, const double& weight)
{
	cout << name << " " << address << " " << age << " " << height << " "
		<< weight << endl;
}

int main()
{
	Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };

	print(jj.name, jj.address, jj.age, jj.height, jj.weight);

	vector<string> name_vec;
	vector<string> addr_vec;
	vector<int> age_vec;
	vector<double> height_vec;
	vector<double> weight_vec;

	print(name_vec[0], addr_vec[0], age_vec[0], height_vec[0], weight_vec[0]);

	return 0;
}

이렇게 구조체를 만들 수 있습니다. 하지만 이 구조체도 다른 사람의 값을 출력해주려면 print를 통해 위와 같이 반복을 해주어야 합니다. 

 

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;


class Friend
{
public: // access specifier ( public, private, protected)
	string name;
	string address;
	int age;
	double height;
	double weight;

	void print()
	{
		cout << name << " " << address << " " << age << " " << height << " "
			<< weight << endl;
	}
};



void print(const string& name, const string& address, const int& age,
	const double& height, const double& weight)
{
	cout << name << " " << address << " " << age << " " << height << " "
		<< weight << endl;
}

int main()
{
	Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };

	jj.print();

	vector<string> name_vec;
	vector<string> addr_vec;
	vector<int> age_vec;
	vector<double> height_vec;
	vector<double> weight_vec;

	print(name_vec[0], addr_vec[0], age_vec[0], height_vec[0], weight_vec[0]);

	return 0;
}

객체라는 것은 데이터와 함수들을 출력해주는 기능을 하는 것입니다. 이것이 Object고 이 객체라는 개념을 프로그래밍 언어로 구현하는 것, 그 키워드가 class입니다. object라는 개념을 문법으로 구현할 때 class를 사용한다고 보면 됩니다. 

 

Friend 자체를 사용자 정의 자료형처럼 사용하고 있는데요. 변수처럼 이름을 넣고 선언을 해줘야 메모리를 차지해주는 것이 jj입니다. 이런 것을 바로 instanciation이라고 합니다. 

반응형