Programming Language/C,C++

C++에서 구조체와 클래스 차이

TwinParadox 2017. 10. 3. 19:10
728x90

최근까지 흔한 커리큘럼이 C를 배우고 C++로 넘어가는 과정이었다. 두 언어를 완전히 다르게 보는 시각에서 접근해서인지는 몰라도, C++에서 구조체와 클래스의 차이를 잘못 이해하고 있는 사람들이 여럿 있는 듯 하다. 특히 C에서의 struct를 가지고 와서 C++의 struct와 동일시하면서, C++에서는 struct는 무조건 금기시 되어야 하는 것으로 분류해 무조건 class를 쓰는 게 옳다고 생각하는 오개념을 가진 사람들도 있었다.


C++에서의 struct와 class의 차이를 C의 struct와 C++의 class로 잘못 비교하고 있다는 것을 알지 못한 채로 개념이 굳어져 가는 사람들이 많은 것 같다. C++을 대하는 태도와 관심 정도에 따라 이럴 수 있다고 생각하기 때문에 이를 혼동한다고 해서 큰 문제가 된다고 생각하지는 않는다.


그도 그럴 것이, 뭔가 새로운 걸 만들지 않는 한 기본적으로 책이나 강좌를 따라가는 사람들이 많아서 C++에서는 OOP(Object Oriented Programming;객체 지향 프로그래밍) 개념을 익히고 가는 것을 제 1의 목표를 두는 경우가 많은 터라, C++의 struct, C의 struct에 대해서 고민해보지 않고 대충 판단하고 넘어가는 경우가 많다.




C의 struct, C++의 struct에 대해서 차이를 알면 쉬워진다. 기본적으로는 C++의 struct C의 struct와 동일한 방식으로 사용이 가능하다. 여기까진 괜찮다. 문제는, C++의 struct를 C의 struct와 완전히 동일하게 생각하는 시점에서부터 발생한다.


많은 사람들이 착각하고 있는 것이 있는데, C의 struct처럼 C++의 struct에도 내부에는 자료형들만 넣을 수 있고, 접근 지정 범위나, 함수를 넣을 수 없다고 생각한다. C++의 struct는 C++의 class와 다르게 멤버 함수를 가질 수 없고, 캡슐화를 통한 상속이 불가능하다고 보는 것이다.




이는 잘못된 생각이다. C++의 struct는 위에서 말했던 것과 완전히 반대다. C++의 struct는 C++의 class와 거의 동일한 구조와 기능을 갖기 때문에 위에서 이야기했던 사람들이 불가능하다고 생각했던 객체지향적 성격들, 함수를 갖거나 접근 지정자를 사용하는 것들이 가능하다.


그럼 도대체 C++에서 struct와 class는 무엇이 다르고, 어떨 때 struct를 쓰는 것이 좋을까?


클래스는 기본적인 접근 설정이 private인 반면, 구조체의 경우 public으로 되어 있다. C의 struct와의 호환을 위해서 C++의 struct는 class와는 기본 접근 지정이 다르다는 차이점이 있다.




필자는 개인적으로 C++을 이용할 때 특별한 기본 접근 설정이 필요 없으면서, 변수에 값만 담을 경우엔 struct를 사용하고, 그렇지 않은 모든 경우에 대해서는 class를 사용한다. 관습적으로 볼 때 C의 struct와 접근 지정자를 제외하고는 동일하게 사용하는 편이다.


간단하게 요약하자면 C의 struct와 C++의 struct는 다른 것이며, C++의 struct는 기본 접근 지정자를 제외하고는 C++의 class와 다를 게 없다는 것이다.

728x90