c++ 구조체와 class

c를 잠깐 배우다가 오랜만에 c++를 공부하고 있는데, 구조체와 Class의 차이를 잘 모르겠더라구요.

구조체에서는 변수타입이 하나 이상 있을때 주로 사용한다고 들었습니다.
하지만 Class도 멤버변수로 만들고 사용해도 되지 않나요?

c++코린이가 질문올립니다.

구조체는 의미 있다고 생각하는 변수들을 묶는 틀이라고 보면 됩니다.

인간의 외형을 구조체로 만들어보면 이렇게 되겠죠?

struct HumanAppearance  // 이 단어가 틀릴수도 있음 ㅋ_ㅋ
{
 int Height;
 int Weight;
 ...
}

인간이 의미있다고 생각하는 데이터를 하나로 묶으면 이해하기 쉽고 쓰기도 좋습니다.

클래스는 이 데이터에 동작을 묶었다고 보면 됩니다.

인간이니까 말도하고 걷기도 하겠죠.

class Human
{
public:
    void Speak();
    void Walk();
    ...
private:
    HumanApperance mApperance;
}

이러면 프로그래머가 인간을 프로그래밍한것이죠.

1 Like

문법적으로는 디폴트가 스트럭트는 public 클래스는 private말고는 차이가 아예없습니다

2 Likes

구조체에서도 맴버함수를 선언할 수 있고요.
EunS님이 말씀하신것처럼 default가 public이냐 private이냐의 차이가 잇습니다.

2 Likes

상속할때도 디폴트 달라요

1 Like

struct를 상속하든 받든 생각도 못해본지라 몰랐네요 ㄷㄷ

1 Like

default로 public이냐 private냐 이 차이는 암묵적으로 cpp 개발자들간에 object를 읽을 때 struct냐 class냐에 따라서 이 object를 설계한 사람의 의도를 보이게 됩니다.

property를 직접 접근 하게 할 것이면 struct
operator로 접근하게 할 것이면 class죠

어떤 object의 user는 object에 대한 expert가 아니기 때문에 지식이 부족합니다.operator로만 접근하게 하면 writer가 명시적으로 제공 하는 방법으로만 접근 할 수 있도록 제한하여 user의 실수나 잘못 된 사용으로부터 막을 수 있는데요. 이건 명백히 실수할 여지가 적고 오해의 여지가 없다 싶으면 struct로 두기도 합니다.

대규모 협업시에는 협업자나 후임자를 위해 코드를 방어적으로 짜게되기 때문에 왠만하면 전부 class가 되더라구요. ㅎㅎ 가장 간단한 예시로 그냥 integer형이라도 범위를 제한하게 해서 써야되는거면 사용자가 입력한 값을 확인해줘야 하니까요. 범위 밖이면 fail를 return하고 로깅을 하고요.

2 Likes