About C++ – “C++의 객체지향 프로그래밍, C++의 구조체 vs C의 구조체 vs C++의 클래스”
About C++ – “C++의 객체지향 프로그래밍, C++의 구조체 vs C의 구조체 vs C++의 클래스”
C언어의 구조체 vs C++의 구조체
우리는 C언어에서 구조체라는 것을 배웠습니다. (About C – “구조체, 구조체 선언, 구조체 활용” – GdsanaDEV)
요약하자면, C언어에서 구조체는 여러가지 다른 자료형들을 한데 모아 새로운 자료형으로 만드는 것이었습니다. 배열과 다르게, 서로 다른 자료형들을 모아 묶어서 관리할 수 있었다는 것입니다.
C의 구조체가 변수의 모임이었다면, C++의 구조체는 변수와 함수의 모임입니다.
struct Dog{
char name[10];
int age;
double weight;
};
이것은 C언어에서는 struct Dog 형 이지만, C++에서는 Man형이 됩니다.
C의 구조체와 C++의 구조체는 또 다른 점이 있는데, 그것은 구조체 변수를 선언하는 방식입니다. C언어에서는 struct Dog happy;
처럼 해야 하는 반면, C++에서는 Dog happy;
처럼 구조체명과 변수명만 써도 구조체 변수를 선언할 수 있습니다.
또, C++에서 구조체 틀을 만들 때는 구조체 이름을 생략할 수도 있습니다.
struct {
char name[10];
int age;
double weight;
} happy;
하지만 이러한 경우에는 구조체의 이름이 없으므로 happy 외에는 구조체 변수를 더 이상 만들 수 없다는 단점이 있습니다. 구조체를 선언할 때 필요한 모든 변수를 한꺼번에 선언해야 하므로 거의 사용하지 않는 방식이지만, 이러한 방법도 있다는 것을 이해하면 되겠습니다.
C++의 탄생
C언어의 프로그래밍 스타일은 ‘구조적 프로그래밍 스타일’ 이었습니다. (About C – “구조적 프로그래밍” – GdsanaDEV 참고) 구조적 프로그래밍은 기능에 따라 세분화하고, 각각의 기능을 함수로 구현하여 처리 동작에 중점을 두어 프로그램을 작성하는 방법론입니다. 이러한 프로그래밍 방식은 자료와 처리 동작의 관계가 밀접한 연관성을 갖지 못하여 프로그램이 복잡해지면 디버깅이나 유지 및 보수가 어려워진다는 단점을 가지고 있었습니다.
컴퓨터의 기술이 발전함에 따라소프트웨어의 기능 요구가 다양화되면서, 소프트웨어는 점점 복잡해졌고 그 규모도 커지고 있었습니다. 분명히, 구조적 프로그래밍 방법론과는 다른 방법론이 필요했습니다.
그러한 배경에서 제시된 것이 바로 객체지향 방법론입니다. 문제의 모든 초점을 실세계에 존재하는 객체를 중심으로 생각하는 것입니다. 그리고, C++언어는 절차적 프로그래밍의 특징도 가지고 있는 객체지향 언어입니다. 그것은 언어 자체가 프로그래머에게 객체지향 프로그래밍을 하도록 할지, 절차지향 프로그래밍을 하도록 할지 간섭하지 않는다는 것입니다.
무튼, C++언어는 객체지향을 프로그래밍을 지원합니다. C언어에서의 문법을 포함하고, 개선시켰으며 class 위주의 다양한 문법이 추가되었습니다. C++는 애초에 C with classes라는 언어로 시작되었습니다.
객체지향 프로그래밍 이야기로 돌아와서, 객체지향 프로그래밍은 자료와 처리동작을 하나로 묶어서 다루는 객체라는 개념을 도입한 프로그래밍 방법입니다. 자료와 연산이 따로 존재하는 것이 아닌 하나로 묶어서 만든 요소가 “객체”이고, 그 객체의 속성을 정의하는 수단을 “클래스”라고 합니다. 그리고, 클래스로부터 만들어진 객체를 “인스턴스”라고 합니다.
C++의 클래스 vs C++의 구조체
C++에서의 클래스는 변수와 함수의 모임입니다. 그런데, 위에서 C++의 구조체도 변수와 함수의 모임이라고 말씀드렸습니다. 그렇다면 C++에서 구조체와 클래스는 같은 것일까요?
정답은 ‘아니오’ 입니다. 접근 제어 속성을 생략한다면 구조체는 public, class는 private이 기본 이 됩니다.