공부/C++

구조체(Struct)와 클래스(Class)의 개념과 차이

셩잇님 2022. 12. 14. 22:20
반응형

 

 

구조체(Struct)

어떤 객체를 표현할 때 1가지의 변수만으로 해당 객체를 표현하기 힘든 경우가 있다. 예를 들어 사람이라는 객체를 표현하려고 할 경우 이름, 나이, 성별, 키, 몸무게 등 다양한 정보에 대한 변수가 필요하게 된다.

// 이름, 나이, 성별, 키, 몸무게 
string name;
int age;
string sex;
int height;
int weight;

 

사람이 1명뿐이라면 이렇게 5개의 변수를 하나하나씩 선언하여 사용해도 상관없지만, 사람이 10명, 혹은 100명이 되어 더 많아진다면 사람이 추가될 때 마다 새로운 변수를 5개 씩 만들어줘야한다. 이러한 점을 해결하기 위해 C++에서는 여러 개별 변수(이름, 나이, 성별 키, 몸무게)를 하나로 그룹화하여 데이터 유형으로 생성할 수 있는 구조체(Struct)를 제공한다.

 

구조체(Struct)는 다양한 타입의 변수 집합(int, string, float 등) 을 하나의 타입으로 나타낸 것이라고 이해하면 된다. 이 때 구조체(Struct)를 구성하는 변수(이름, 나이, 성별, 키, 몸무게) 등을 구조체(Struct)의 멤버, 혹은 멤버 변수라고 한다.

 

즉, 구조체는 사용자가 하나 이상의 기본 타입을 가지고 새로운 자료형을 정의하는 사용자 정의 타입이다.

 


 

구조체(Struct)의 선언 및 정의

구조체의 선언 문법은 아래와 같다.

struct 구조체 이름
{
	타입(int, float, string 등) 멤버변수1;
	타입(int, float, string 등) 멤버변수2;
};

예를 들어 사람이라는 구조체를 만든다고 하면 아래와 같다.

struct Human
{
	string name;
	int age;
	string sex;
	int height;
	int weight;
};

 

이를 메인함수에서 원하는 이름으로 선언하여 사용하면 된다

int main()
{
	Human A; // Human이라는 구조체를 A라고 명명한다.
}

 

 


 

구조체(Struct)의 접근 및 초기화

구조체 멤버에 접근하기 위해서는 연산자(.)를 이용하여 접근한다.

int main()
{
	Human A; // Human이라는 구조체를 A라고 명명한다.
    A.name = "홍길동";
    A.age = 20;
    A.sex = "Male";
    A.height = 178;
    A.weight = 78;
}

그렇지만 위와 방법으로 하나하나 선언하며 진행할 경우 매우 번거로운건 여한가지이다. 이를 통해 구조체(Struct)를 선언할 때 초기화 하는 방법도 존재한다.

int main()
{
	Human A = {"홍길동", 20, "Male", 178, 78};
}

 


 

클래스(Class)

클래스는(Class) 구조체(Struct)와 마찬가지로 특정 객체를 생성하기 위해 변수(멤버 변수)와 메서드로 구성됩니다. C++ 에서 클래스(Class)는 구조체(Struct)의 상위 호환으로 이해할 수 있습니다. 구조체(Struct)와 다른 점은 접근 제어 지시자(public, private, protected)가 추가 되었고, 함수를 포함할 수 있게 된 점입니다.

 


 

클래스(Class)의 선언 및 정의

클래스의 생성 문법은 다음과 같습니다.

class 클래스 이름
{
	public: // (접근 제어 지시자)
		멤버 변수;
		멤버 변수;
}

 

생성 문법을 바탕으로 하나 생성하면 다음과 같습니다

class MyCar
{
	private:
    	// 멤버 변수
        int fuel = 0;
        bool power = false;
        
    public:
    	// 메소드
        void go() 
        {
        	this -> fuel--;
        }
        
        void oiling(int n)
        {
        	this -> fuel += n;
        }
        
        void fuel_check()
        {
        	std::cout << "연로 : " << fuel << std::endl;
        }
};

 


 

클래스(Class)의 접근 및 초기화

클래스의 생성 또한 구조체와 유사합니다. 아래는 클래스의 생성 및 메서드 호출 예제입니다.

int main()
{
	Mycar car = MyCar(); // 클래스 생성
    
    // 메서드(함수) 호출
    car.iling(100);
    car.huel_check();
    for (int i = 0; i < 10; i++)
    {
    	car.go();
    }
}

 


 

구조체(Struct)와 클래스(Class)의 차이점

이 둘은 특정 객체를 생성하기 위해 사용자가 임의의 사용자 변수를 만든다는 것은 기본적으로 동일합니다. 또한 구조체(Struct)와 클래스(Class) 모두 생성자와 소멸자를 가질 수 있습니다.

 

그렇지만 구조체(Struct)에는 기본적으로 공용 멤버와 메서드가 있으며, 클래스(Class)에는 기본적으로 전용 멤버와 메서드가 있다는 점이 다릅니다. 따라서 본질적으로는 구조체(Struct)와 클래스(Class)의 유일한 차이점은 멤버의 기본 엑세스 접근 수준입니다. 

 

하지만 조금 더 자세하게 얘기하면 구조체(Struct)의 멤버 변수는 기본적으로 공개이며, 클래스(Class)의 멤버 변수는 기본적으로 비공개입니다. 즉 클래스(Class)에서는 각 멤버 변수에 액세스 수준을 지정하기 위해서는 접근 제어 지시자를(예:public, private 등)을 사용해야 하지만, 구조체(Struct)에서는 접근 제어 지시자를 사용하지 않고도 멤버 변수에 직접 접근할 수 있습니다.

 

또 다른 중요한 차이점은 C++에서 클래스(Class)와 함께 상속을 사용할 수 있지만, 구조체(Struct)에서는 사용할 수 없다는 것입니다. 즉, 클래스(Class)에서는 클래스(Class)가 멤버와 메서드를 상속할 수 있는 기본 클래스(Class)를 지정할 수 있지만, 구조체(Struct)에서는 상속을 사용할 수 없습니다.

 

정정합니다. 클래스도 상속할 수 있지만, 구조체 또한 상속할 수 있습니다. 잘못된 정보를 제공드려 죄송합니다. 😥

 


 

출처 : https://min-zero.tistory.com/21

 

[C++ 기본 공부정리] 9. 구조체(struct)

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 1. 구조체 어떤 객체를 표현할때 1가지의 변수 만으로는 부족한 경우가 있다. 예를

min-zero.tistory.com

 

출처 : https://coding-factory.tistory.com/697

 

[C++] 클래스(Class) 사용법 & 예제 총정리

클래스(Class)란? 클래스(class)는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀이며 내부적으로 객체를 정의하기 위한 상태 값을 의미하는 멤버

coding-factory.tistory.com

 

 

 

반응형