Doputer

구조체와 클래스의 차이🔀

by #김도현

C 언어를 공부하다가 구조체라는 개념을 접하게 되고, C++ 언어를 공부하다가 클래스라는 개념을 접하게 된다. 절차 지향 언어에서 객체 지향 언어로 넘어가게 되면 클래스와 객체가 아주 중요한 개념이라는 것을 알게 되는데 사실 C 언어에서 배운 구조체와 큰 차이가 없다.

 

구조체와 클래스

#include <iostream>
using namespace std;

struct Point
{
	int xpos;
	int ypos;
};

int main(void)
{
	Point point = {1, 2};

	cout << point.xpos << "," << point.ypos << endl;

	return 0;
}

 

간단한 구조체를 C++ 언어로 구현하였다. 사실 구조체와 클래스 모두 데이터를 묶을 수 있는 명령어이다. 여기서 구조체를 클래스로 바꾸고 싶으면 struct를 지우고 class로 바꿔주면 된다. 그러나 바로 오류가 발생하는데 둘 다 기능도 같고, 선언도 동일한데 어디서 이런 오류가 발생했을까?

 

접근 제어 지시자

C++ 언어의 접근 제어 지시자는 다음과 같이 세 가지가 있다.

 

접근 제어 지시자 허용 범위
public 어디서든 접근 허용
protected 상속 관계에서 유도 클래스의 접근 허용
private 클래스 내에서만 접근 허용


구조체의 경우 접근 제어 지시자를 따로 선언하지 않으면 모든 객체와 메서드는 public으로 선언된다. 클래스의 경우 접근 제어 지시자를 따로 선언하지 않으면 모든 객체와 메서드는 private로 선언된다.

 

즉, 발생한 오류는 클래스의 접근 제어 지시자를 따로 명시해주지 않았기 때문에 접근이 불가능해서 생긴 오류이다. 따라서 다음과 같이 코드를 수정해주면 오류가 해결된다.

 

#include <iostream>
using namespace std;

class Point
{
public:
	int xpos;
	int ypos;
};

int main(void)
{
	Point point = {1, 2};

	cout << point.xpos << "," << point.ypos << endl;

	return 0;
}

 

기능면에서 구조체와 클래스의 차이는 없다. 둘 다 데이터를 묶는 동일한 역할을 한다. 그러나 문법적으로 struct로 선언하느냐 class로 선언하느냐에 따라 접근 제어 지시자를 고려해주어야 한다.

블로그의 정보

Doputer

#김도현

활동하기