강의에 들어가기 앞서
C++의 핵심은 객체지향의 도입입니다. 그래서 본 강의의 구성을 아래와 같이 구성했습니다.
C++ 입문편 → 객체지향 초급편 → 객체지향 중급편 → 객체지향 고급편 |
그렇기 때문에 입문 편에서는 Class 파트의 가장 기본적인 구조에 대해서만 다룰 예정이며,
"객체지향 초급편 → 객체지향 중급 편→ 객체지향 고급 편"에서 보다 자세하게 강의를 다룰 것입니다.
그렇기 때문에 본 강의에서는 단순히 Class란 이런 것이다 정도의 느낌만 알고 넘어가면 충분합니다.
Class의 기본 구조 및 예시
C++에서 클래스는 데이터 멤버(특성 또는 속성이라고도 함) 및 멤버 함수(메서드 또는 동작이라고도 함)를 단일 엔터티 내에서 캡슐화하는 사용자 정의 데이터 형식입니다. 클래스는 키워드 "class"와 클래스 이름을 사용하여 정의됩니다. 클래스 정의는 여는 중괄호 '{'로 시작하고 닫는 중괄호 '}'로 끝납니다.
다음은 C++ 클래스의 기본 예입니다.
class Example {
public:
int x;
int y;
void setValues(int a, int b);
int addValues();
};
"Example"은 클래스 이름이고 "x"와 "y"는 데이터 멤버이며 "setValues"와 "addValues"는 멤버 함수입니다.
"public:" 키워드는 클래스 멤버의 액세스 가능성을 결정하는 액세스 지정자입니다.
C++ 에는 public, protected 및 private의 세 가지 유형의 액세스 지정자가 있습니다.
public으로 선언된 멤버는 어디서나 액세스 할 수 있는 반면, protected로 선언된 멤버는 클래스 및 해당 파생 클래스 내에서만 액세스할 수 있고 private로 선언된 멤버는 클래스 내에서만 액세스할 수 있습니다.
void Example::setValues(int a, int b) {
x = a;
y = b;
}
int Example::addValues() {
return x + y;
}
여기서 함수 정의는 클래스 외부에서 구현되지만 여전히 클래스 범위 내에 있습니다. 'inline' 키워드를 사용하여 클래스 내부에 함수를 구현하는 것도 가능합니다.
class Example {
public:
int x;
int y;
inline void setValues(int a, int b) {
x = a;
y = b;
}
inline int addValues() {
return x + y;
}
};
이것은 C++ 클래스의 기본 구조이지만 사용 사례와 요구 사항에 따라 더 많은 기능과 복잡성을 가질 수 있습니다.
Class에서 사용되는 public, private, protect 기능 설명 및 예시
C++에서 액세스 지정자 public, private 및 protected는 데이터 멤버 및 멤버 함수와 같은 클래스 멤버의 액세스 가능성을 결정하는 데 사용됩니다.
공용 멤버는 클래스(public) 내부 및 외부 어디에서나 액세스할 수 있습니다. 이러한 멤버는 클래스의 모든 개체뿐만 아니라 개체에 액세스할 수 있는 모든 함수나 클래스에서 액세스할 수 있습니다.
개인 멤버는 클래스(private) 내에서만 액세스 할 수 있습니다. 이러한 멤버는 파생 클래스를 포함하여 클래스 외부의 코드에서 액세스할 수 없습니다. 이는 클래스가 해당 데이터에 액세스 하고 수정하는 방법을 제어할 수 있으므로 캡슐화에 유용합니다.
보호된 멤버는 클래스(protect) 및 해당 파생 클래스 내에서만 액세스할 수 있습니다. 이러한 멤버는 클래스 또는 해당 파생 클래스 외부의 코드에서 액세스할 수 없습니다.
다음은 클래스에서 액세스 지정자를 사용하는 방법의 예입니다.
class Example {
private:
int x;
protected:
int y;
public:
void setValues(int a, int b);
int addValues();
};
이 예에서 데이터 멤버 "x"는 비공개로 선언되며 이는 "Example" 클래스 내에서만 액세스할 수 있음을 의미합니다. 데이터 멤버 "y"는 보호된 것으로 선언됩니다. 즉, "Example" 클래스 및 "Example"에서 파생된 모든 클래스 내에서 액세스할 수 있습니다. 멤버 함수 "setValues" 및 "addValues"는 공용으로 선언되어 어디에서나 액세스할 수 있습니다.
액세스 지정자를 사용하면 클래스 멤버의 가시성 및 액세스 가능성을 제어하여 클래스의 데이터 및 동작을 보다 쉽게 관리할 수 있습니다. 또한 의도하지 않은 데이터 조작을 방지하고 일부 데이터를 비공개로 유지하여 클래스의 무결성을 유지하는 데 도움이 됩니다.
Class에서 사용되는 상속의 개념 설명 및 예시
C++에서 상속은 한 클래스(파생 클래스)가 다른 클래스(기본 클래스)의 속성과 메서드를 상속할 수 있도록 하는 메커니즘입니다. 이를 통해 코드 재사용이 가능하고 기존 클래스의 수정된 버전인 새 클래스를 생성할 수 있습니다.
기본 클래스는 부모 클래스 또는 슈퍼 클래스라고도 하며 파생 클래스는 자식 클래스 또는 하위 클래스라고도 합니다. 파생 클래스는 기본 클래스의 모든 비공개 멤버를 상속하며 새 멤버를 추가하거나 기존 멤버를 재정의할 수도 있습니다.
다음은 C++에서 상속을 사용하는 방법의 예입니다.
class Shape {
protected:
int width, height;
public:
void setWidth(int w) {
width = w;
}
void setHeight(int h) {
height = h;
}
};
class Rectangle: public Shape {
public:
int getArea() {
return width * height;
}
};
이 예제에서 "Shape" 클래스는 기본 클래스이고 "Rectangle" 클래스는 파생 클래스입니다.
"Rectangle" 클래스는 "Shape" 클래스의 "width" 및 "height" 멤버와 "setWidth" 및 "setHeight" 멤버 함수를 상속합니다.
"Rectangle" 클래스는 또한 상속된 멤버 "width" 및 "height"를 사용하여 사각형의 면적을 계산하는 새 멤버 함수 "getArea"를 추가합니다.
상속을 사용하면 파생 클래스가 다른 파생 클래스에서 상속할 수 있는 클래스의 계층 구조를 만들 수 있습니다. 또한 하나의 클래스가 여러 클래스로부터 상속받을 수 있는데 이를 다중 상속이라고 합니다.
C++에서는 액세스 지정자도 상속됩니다. 즉, 멤버가 기본 클래스에서 비공개이면 파생 클래스에서도 비공개가 됩니다. 멤버가 기본 클래스에서 보호되는 경우 파생 클래스에서 보호됩니다.
상속은 기존 코드를 재사용하고 보다 전문적인 클래스를 생성할 수 있는 강력한 기능입니다. 또한 파생 클래스가 기본 클래스의 특정 버전인 클래스 간의 "is-a" 관계 개념을 촉진합니다.
클래스(Class)와 구조체(Struct)의 차이점 → Class만 기억하자
C++에서 클래스와 구조체는 모두 사용자 정의 데이터 유형을 정의하는 데 사용되지만 둘 사이에는 몇 가지 중요한 차이점이 있습니다.
클래스와 구조체의 주요 차이점은 기본 액세스 수준입니다. 클래스에서 기본 액세스 수준은 비공개이고 구조체에서는 기본 액세스 수준이 공개입니다. 즉, 기본적으로 클래스의 멤버는 클래스 내에서만 액세스할 수 있지만 구조체의 멤버는 어디에서나 액세스할 수 있습니다.
이러한 차이로 인해 클래스는 종종 데이터를 캡슐화하고 데이터에 대한 제어된 액세스를 제공하는 데 사용되는 반면 구조체는 자유롭게 액세스하고 수정할 수 있는 간단한 데이터 구조를 나타내는 데 자주 사용됩니다.
클래스와 구조체의 또 다른 차이점은 멤버 함수의 사용입니다. 클래스에는 종종 기능과 동작을 제공하는 멤버 함수가 있는 반면 구조체에는 멤버 함수가 적고 데이터 멤버에 더 많이 의존하는 경향이 있습니다.
다음은 C++에서 클래스와 구조체를 사용하는 방법의 예입니다.
class ExampleClass {
private:
int x;
public:
void setX(int value) {
x = value;
}
int getX() {
return x;
}
};
struct ExampleStruct {
int x;
};
이 예에서 클래스 "ExampleClass"에는 데이터 멤버에 대한 액세스를 제어하기 위한 전용 데이터 멤버 "x"와 공용 멤버 함수 "setX" 및 "getX"가 있습니다. 구조체 "ExampleStruct"에는 직접 액세스하고 수정할 수 있는 공용 데이터 멤버 "x"가 있습니다.
결론적으로 C++의 클래스와 구조체는 모두 사용자 정의 데이터 유형을 정의할 수 있지만 기본 액세스 수준이 다르고 사용 방식이 다릅니다. 클래스는 일반적으로 캡슐화 및 데이터에 대한 제어된 액세스를 제공하는 데 사용되는 반면 구조체는 일반적으로 자유롭게 액세스하고 수정할 수 있는 간단한 데이터 구조에 사용됩니다.
이것으로 C++입문편의 총 10개의 강의가 마무리되었습니다. 여기까지의 공부를 통해 여러분은 이제 C++의 기초문법을 읽힌 것입니다. 이는 절대 C++를 바탕으로 한 코딩을 할 수 있다는 의미가 아닙니다. 단지, 약간의 해석을 할 수 있다는 의미입니다.
***************************************************************************************************
이제 시작입니다. 영어 단어를 외웠다고 해서 영작을 할 수 있는 것이 아닌 것처럼, 기본 문법을 배웠다고 해서 코딩을 할 수 수는 없습니다.
그러니 객체지향 초급 편, 중급 편, 고급 편을 통해 앞으로 더 열심히 트레이닝해야 됩니다. 그리고 프로젝트를 진행해야
어느 정도 코딩을 할 수 있다? 요정도의 느낌을 받을 수 있을 것입니다.
그럼 개발자의 길로 들어오기 위한 기초 관문을 통과하신 것을 축하드리며 앞으로 파이팅입니다.

감사합니다.
***************************************************************************************************
'C++ > 입문편' 카테고리의 다른 글
9강. C++과 C#의 차이점 → 메모리 누수 및 속도 측면에서 살펴보자 (0) | 2023.01.22 |
---|---|
[보충 설명] 8.1.강 malloc & free와 new&delete에 대해 알아보자 (0) | 2023.01.22 |
8강. 실행중인 프로그램의 메모리 공간을 살펴보자 (데이터, 스택, 힙, malloc & free) (0) | 2023.01.22 |
7강. 포인터와 레퍼런스 기본 개념 및 예시 코드로 살펴보기(With Call-by-value, Call-by-reference) (0) | 2023.01.22 |
6강. 단일 및 이중 배열 기본 구조 및 예시 살펴보기 (0) | 2023.01.22 |
댓글