IT 프로그래밍

[따배시 C++ 8.2] 캡슐화, 접근 지정자, 접근 함수

기술1 2024. 4. 8. 12:30
반응형

예시코드

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

struct Date
{
	int m_month;
	int m_day;
	int m_year;
};


int main()
{
	Date today;
	today.m_month = 8;
	today.m_day = 4;
	today.m_year = 2024;

	return 0;
}

이렇게 struct를 사용할 수 있지만 class로 바꿀 수도 있습니다. 하지만 class로 바꿀 때 int main에 있는 것들은 에러가 납니다. 왜냐하면 public:을 사용하지 않았기 때문입니다. 

 

public: 은 acces specifier라고 부릅니다. 즉 접근지정자라고 부릅니다. class 안에 지정된 것이 밖에서 지정할 수 있는지 없는지를 나타내는 것입니다. private:도 있습니다. 이것은 private은 막는다는 뜻입니다. protected:도 있지만 이는 상속을 공부하신 후 아시면 됩니다. 

 

CLASS 이용 예시

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

class Date
{
	int m_month;
	int m_day;
	int m_year;
	
public:
	void setDate(const int& month_input, const int& day_input, const int& year_input)
	{
		m_month = month_input;
		m_day = day_input;
		m_year = year_input;
	}
};


int main()
{
	Date today;
	today.setDate(8, 4, 2025);

	return 0;
}

이렇게 함수를 통해서 연결을 해주면 됩니다. 

 

 

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

class Date
{
	int m_month;
	int m_day;
	int m_year;
	
public:
	void setDate(const int& month_input, const int& day_input, const int& year_input)
	{
		m_month = month_input;
		m_day = day_input;
		m_year = year_input;
	}

	void setMonth(const int& month_input)
	{
		m_month = month_input;
	}

	int getDay()
	{
		return m_day;
	}

	void copyFrom(const Date& original)
	{
		m_month = original.m_month;
		m_day = original.m_day;
		m_year = original.m_year;
	}
};


int main()
{
	Date today;
	today.setDate(8, 4, 2025);
	today.setMonth(10);

	cout << today.getDay() << endl;

	Date copy;

	copy.copyFrom(today);
	return 0;
}

이렇게 class에서 public를 걸어두지 않고 private를 한 다음에 class 안에 함수만 public을 통해서 int main에 쓰면 헷갈리지 않고 쓸 수 있는 방법입니다. 만약에 int m_month 같은 변수를 public을 두고 사용할 때 해당 변수의 이름이 바뀌게 되면 다 바꿔야 하기 때문에 번거로울 수 있습니다.

 

그래서 위에 식처럼 사용하고 싶은 것을 void setMonth() 이런식으로 해서 사용을 한다면 int main에서는 today.setMonth() 이런 식으로 함수만 이용해서 사용하면 되기에 깔끔하게 표현을 할 수 있습니다. 

반응형