구조체와 클래스의 차이점

Kang Chang Hwan·2024년 6월 10일

Computer Science

목록 보기
5/5

C++로 개발을 하다가 문득 든 생각이 그럼 ... 구조체랑 클래스의 차이점은 뭘까?하는 생각이 들어서 간단하게 다뤄보려고 한다.

구조체와 클래스의 차이점 중 하나는 외부인의 출입 여부(Access specifier)인데, 다음 예시를 통해 이해해보자.

Access Specifier

클래스는 집과 같다. 외부에서 출입이 가능한 건(public) 현관, 출입문, 창문 등이 있을 것이고 침실이나 화장실을 통해서 출입을 할 수 없다.(private)

       ------------------
       | 클래스(집)       |
       |-----------------|
       | private:       |  
       | - 침실         |----
       | - 화장실       |    |
       |-----------------|    |
       | public:        |    |
       | + 현관         |----| 
       | + 출입문()     |    |
       | + 창문()       |    |
       ------------------    |
       |                     |  
       | 외부에서 접근 가능      |

그리고 구조체(struct)는 오두막이다.

       ------------------
       | 구조체(오두막)   |
       |-----------------|
       | public:        |
       | + 방           |----
       | + 부엌         |----| 외부에서 접근 가능
       | + 욕실         |    |
       |-----------------|    |
       | private:       |    |  
       |                |----| 
       ------------------    |

즉, 구조체(오두막)는 (심하게 말하면 ㅋㅋ) 어디든지 출입이 가능하다(public) 프로퍼티, 메서드 둘 다 기본적으로 public이다.

따라서 클래스의 경우에 접근 지정을 통해 외부 클래스의 접근을 제어할 수 있기 때문에 클라이언트 프로그래머가 클래스를 조작하다가 실수를 범하는 등의 오류를 방지할 수 있고 클래스 간에 알아야 할 내용과 그렇지 않아야 할 내용을 구분지을 수 있다.

상속(Inheritance)

그리고 무엇보다도 클래스는 상속을 목적으로 만들어졌기 때문에 어떤 한 클래스의 프로퍼티와 메서드를 상속하면 자식 클래스에서는 부모 클래스의 프로퍼티와 메서드를 재사용할 수 있다.

구조체도 C++에서 상속, 접근 제어를 사용은 할 수 있겠지만 간단하게 데이터를 묶는 형태라면 구조체를, 그 이외의 용도라면 class를 사용하는 것이 좋을 것 같다.

profile
아쉬움 없이 살자. 모든 순간을 100%로!

0개의 댓글