■ C/C++ 구조체(struct, class)
ㆍ C와 C++ 비교
- 클래스와 객체의 차이는 구조체를 위한 함수들이 클래스의 경우 "종속성"을 띠지만, 객체의 경우 "전역함수"의 형태를 띠기 때문에 "종속성"을 나타내지 못하고 다른 영역에서 해당 함수를 호출하는 실수를 범할 수 있다.
* C++에서는 객체 안에 함수를 넣을 수 있다.
1. C 언어(struct)
ex>
#define ID_LEN 20
#define MAX_SPEED 200
#define FUEL_STEP 2
#define ACC_STEP 10
#define BRK_STEP 10
typedef struct Car
{
char gamerID[ID_LEN];
int fuelGauge;
int curSpeed;
} Car;
void ShowCarState(const Car &car)
{
...
}
void Accel(Car &car)
{
...
}
2. C++(class)
ex>
namespace CAR_CONST
{
enum
{
ID_LEN=20,
MAX_SPD=200,
FUEL_STEP=2,
ACC_STEP=10,
BRK_STEP=10
};
}
class Car
{
private:
char gamerID[Car_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
public:
void InitMembers(char* ID, int fuel);
void ShowCarState(cont Car &car);
void Accel();
};
void Car::InitMembers(char* ID, int fuel)
{
...
}
void Car::ShowCarState()
{
...
}
void Car::Accel()
{
...
}
ㆍ 접근제어 지시자(C++)
- public: 어디서든 접근 허용
- protected: 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용
- private: 클래스 내에서만 접근 허용
* 기본적으로 class의 경우 private로, struct의 경우 public으로 선언된다.
ㆍ 클래스 디자인 (C++)
1. 정보 은닉
- 객체의 멤버변수에 접근을 제한하도록 유도하는 것(오직 멤버함수를 통해 접근하도록 유도)
- 접근제어 지시자 Private 사용
- 일반적으로 "GetXXX", "SetXXX"로 함수 이름을 정의하고, 이를 이용하여 변수에 접근
* 추가적으로 멤버변수를 변경하지 않는 멤버함수에는 const를 추가하여 안정성을 높일 수 있다.
* const 함수 내에서는 const가 아닌 함수의 호출이 제한된다.
=> ex> int GetX() const;, 이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다는 의미
2. 캡슐화
- 관련 있는 함수와 변수를 하나의 클래스 안에 묶는 것
- 구현하는 프로그램의 성격과 특성에 따라서 적용하는 범위가 달라지기 때문에, 범위를 결정하기 쉽지 않다!!!
- 보통 얘기할 때, 캡슐화는 기본적으로 정보 은닉을 포함하는 개념이라고 이야기한다.
'Coding > C & C++' 카테고리의 다른 글
C++ 생성자, 소멸 (0) | 2020.02.21 |
---|---|
C/C++ 파일 분할과 헤더 파일의 디자인 (0) | 2020.02.18 |
C/C++ 함수 오버로딩 vs 함수 오버라이딩 (0) | 2020.01.31 |
C/C++ 배열과 포인터 (0) | 2020.01.11 |
C/C++ 입출력 (0) | 2020.01.04 |