최근까지 흔한 커리큘럼이 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와 다를 게 없다는 것이다.
'Programming Language > C,C++' 카테고리의 다른 글
C++] 명품 C++ 프로그래밍 5장 실습문제 (2) | 2017.10.27 |
---|---|
C++] 명품 C++ 프로그래밍 4장 실습문제 (0) | 2017.10.26 |
[C++] STL을 사용해 간편하게 알고리즘 문제 풀기 (0) | 2017.09.06 |
C,C++] 조건 컴파일 문 (0) | 2017.07.06 |
C, C++] 헤더파일과, CPP파일로 소스 코드 분리 (29) | 2017.07.04 |