개발자 면접 공부/C-C++

Struct vs Class

chogyujin 2022. 8. 3. 21:20
728x90

오늘은 Struct(구조체) 와 Class에 차이에 대해 공부 하도록 하겠습니다.


보통 Struct와 Class는 별 차이가 없습니다.

#include<iostream>

using namespace std;

struct S
{
	int a;
	string b;

	S(int a, string b) : a{a},b{b}
	{

	}
	void print()
	{
		cout << a << " " << b << endl;
	}
};

class C
{
public:

	int a;
	string b;

	C(int a, string b) : a{ a }, b{ b }
	{

	}
	void print()
	{
		cout << a << " " << b << endl;
	}
};

int main()
{
	S s = { 1,"abs" };
	C c = { 2,"qbs" };

	s.print();
	c.print();

	return 0;
}

C++에서는 Struct로 class처럼 구현이 가능합니다.(구조체로 상속도 가능)

struct S
{
	int a;
	string b;

	S(int a, string b) : a{a},b{b}
	{

	}
	virtual void print()
	{
		cout << a << " " << b << endl;
	}
};

struct S1 : public S
{
	float f;
	S1(int a, string b, float f) : S(a, b), f{ f }
	{

	}
	void print()
	{
		cout << a << " " << b << " " << f << endl;
	}
};

C에서는 struct 안에 함수를 정의를 못합니다 -> C++부터 나온 기술

 

왜 그럼 Class를 사용할가요?

 

struct는 기본적으로 public 입니다.

class는 기본적으로 private 이고요

 

여기서 정보 은닉 이란 개념이 나옵니다.

 

접근 제어 지시자가 struct는 기본이 public이고 class는 private입니다.

 

이는 객체지향 언어의 특징이며 외부에서 해당 클래스를 사용시 실수로 인한 수정이나 불필요한 접근을 제한 하기 떄문입니다.

 

C++을 사용하면서 class와 struct는 본인 입맛에 맞게 사용하는것을 추천합니다.

 

왜 그럼 struct를 C++에서 살려놨을가요?

win32API에서 소켓프로그래밍은 대부분 C기반이므로 Class가 없는 C는 Struct를 많이 사용했습니다.

또한 네트워크 통신에 있어서 데이터의 정렬과 크기가 정확해야합니다. 이 부분은 struct를 사용하는것을 권장합니다.