본문 바로가기
프로그래밍/C++

C++ 클래스 정의, 구조체와 차이점(접근제어 지시자)

by Hwan2 2019. 1. 17.
728x90
반응형

※ 클래스를 알기전에 왜 클래스를 사용하는지 이유가 궁금하시면 객체지향 사용하는 이유(클릭)를 가보시기 바랍니다.

 

C++에서 클래스와 비교되는 것이 구조체 입니다.

 

이 둘의 코드를 비교해 보겠습니다.

 

구조체

 
#include<iostream>    
using namespace std;

struct MyStruct
{
    int num1;
    char arr[10];

    void print(void) { 
        cout << "My Struct"  << endl; 
        cout << "num1 = " << num1 << endl;
        cout << "arr[0] = " << arr << endl;
    }
};

int main(void) {

    MyStruct m = { 10, "MY" };
    m.print();

    return 0;
}
​
 

 

클래스
 
#include<iostream>    
using namespace std;

class MyStruct
{
public:
    int num1;
    char arr[10];


    void print(void) { 
        cout << "My Struct"  << endl; 
        cout << "num1 = " << num1 << endl;
        cout << "arr[0] = " << arr << endl;
    }
};

int main(void) {

    MyStruct m = { 10, "MY" };
    m.print();

    return 0;
}
​
 
별 차이가 없습니다......
그렇습니다. C++에선 struct로 class처럼 구현이 가능합니다.(구조체로 상속도 가능합니다.)
(C와 C++의 구조체를 비교하시면 안됩니다. C++에서는 구조체 안에 함수도 정의할 수 있습니다.
typedef선언 없이 바로 구조체 명으로 구조체를 만들 수 있구요.)
 
그렇다면 왜!! class를 사용하느냐....
 
자세히 들여다보면 차이점은 있습니다.!
 
 

struct는 기본적으로 모두 public으로 선언되고

class는 모두 private으로 선언됩니다.

 

여기서 정보 은닉 이란 개념이 나오게 됩니다.

 

public, protected, private가 있으며 이를 접근 제어 지시자 라고 합니다.

 

 

public은 어디서든 접근이 가능합니다.

protected는 상속관계 일 때 접근이 가능합니다.

private은 클래스(구조체) 내에서만 접근이 가능합니다.

 

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

(굳이 변수 값을 바꿔야하는 상황이 필요하다면 public으로 함수를 따로 정의해 함수를 통해 변경하는 방법도 있습니다.)

 

C++을 사용하시면서 class와 struct는 본인 입맛에 맞게, 상황에 맞게 사용하시면 될 것 같습니다.

 

C++에 struct가 존재하는 이유는 여러가지가 있겠지만 굳이 한 예를 들자면

win32 API에서의 소켓프로그래밍 부분은 C기반으로 만들어져 있으며 C는 class를 지원하지 않습니다.

뿐만 아니라 네트워크 통신에 있어서 데이터의 정렬과 크기가 정확해야 함으로 이 부분에 있어선 C++도 C의 struct처럼 사용합니다.

 

 

 

 

반응형

댓글


스킨편집 -> html 편집에서