C++로 개발을 하다가 문득 든 생각이 그럼 ... 구조체랑 클래스의 차이점은 뭘까?하는 생각이 들어서 간단하게 다뤄보려고 한다.
구조체와 클래스의 차이점 중 하나는 외부인의 출입 여부(Access specifier)인데, 다음 예시를 통해 이해해보자.
클래스는 집과 같다. 외부에서 출입이 가능한 건(public) 현관, 출입문, 창문 등이 있을 것이고 침실이나 화장실을 통해서 출입을 할 수 없다.(private)
------------------
| 클래스(집) |
|-----------------|
| private: |
| - 침실 |----
| - 화장실 | |
|-----------------| |
| public: | |
| + 현관 |----|
| + 출입문() | |
| + 창문() | |
------------------ |
| |
| 외부에서 접근 가능 |
그리고 구조체(struct)는 오두막이다.
------------------
| 구조체(오두막) |
|-----------------|
| public: |
| + 방 |----
| + 부엌 |----| 외부에서 접근 가능
| + 욕실 | |
|-----------------| |
| private: | |
| |----|
------------------ |
즉, 구조체(오두막)는 (심하게 말하면 ㅋㅋ) 어디든지 출입이 가능하다(public) 프로퍼티, 메서드 둘 다 기본적으로 public이다.
따라서 클래스의 경우에 접근 지정을 통해 외부 클래스의 접근을 제어할 수 있기 때문에 클라이언트 프로그래머가 클래스를 조작하다가 실수를 범하는 등의 오류를 방지할 수 있고 클래스 간에 알아야 할 내용과 그렇지 않아야 할 내용을 구분지을 수 있다.
그리고 무엇보다도 클래스는 상속을 목적으로 만들어졌기 때문에 어떤 한 클래스의 프로퍼티와 메서드를 상속하면 자식 클래스에서는 부모 클래스의 프로퍼티와 메서드를 재사용할 수 있다.
구조체도 C++에서 상속, 접근 제어를 사용은 할 수 있겠지만 간단하게 데이터를 묶는 형태라면 구조체를, 그 이외의 용도라면 class를 사용하는 것이 좋을 것 같다.