구조체의 탄생 이유
- 관련 있는 데이터를 한꺼번에 묶으면, 관리 및 사용이 용이함 (ex, 캐릭터 생성, 자동차 제조, 빵 제조 등등..)
구조체
C언어 구조체 변수 선언
struct Bread sickbbang;
struct Bread soboru;
만약 struct를 생략하고 싶을 때, 구조체에 typedef를 붙여 아래와 같이 정의해야 한다.
typedef struct bread
{
...
...
}Bread;
그럼 아래와 같이 선언 가능
Bread sickbbang;
Bread soboru;
C++ 구조체 변수 선언
typedef 선언 없이도 아래과 같이 변수 선언 가능
struct bread
{
...
...
};
bread sickbbang;
bread soboru;
C++ 함수가 구조체 안에 없을 때와 있을 때
1. 관련 함수가 구조체 안에 없을 때 (전역함수의 형태)
void showbakery(const Bread &bread)
{
cout << "빵 종류 :" << bread.name << endl;
cout << "빵 가격 : " << bread.price << endl << endl;
}
2. 관련 함수가 구조체 안에 있을 때 (구조체 함수의 형태)
void showbakery()
{
cout << "빵 종류 :" << name << endl;
cout << "빵 가격 : " << price << endl << endl;
}
3. 관련 함수가 구조체 안에 원형선언으로 있고 정의는 밖으로
struct bread
{
...
void showbakery();
...
};
void bread::showbakery()
{
cout << "빵 종류 :" << name << endl;
cout << "빵 가격 : " << price << endl << endl;
}
3번처럼 코드를 관리하는게 한눈에 알아볼 수 있다.
클래스
struct 대신 class를 사용하면, 구조체에서 클래스로 정의
클래스는 아래의 구조체 초기화 방식처럼 초기화하지 못함
bread soboru = {"soboru", 2000};
별도의 선언이 없을 시, 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능하다.
따라서 아래의 형태처럼 클래스 선언(클래스 변수에 접근할 수 없기 때문에)
bread soboru;
접근을 가능하게 하는 방법
- 접근과 관련해서 별도의 선언이 없으면, 클래스 내에 선언된 변수 및 함수에 대한 접근은 허용하지 않음
- 따라서 접근과 관련된 지시자를 별도로 해라!
접근제어 지시자
- public : 모든 접근 허용
- protected : 상속관계 시, 유도 클래스에서 접근허용
- private : 클래스 내에서만 접근 허용
구조체와 클래스의 공통점
- 둘 다 접근제어 지시자의 선언이 가능하고, 그 의미도 동일
구조체와 클래스의 차이
- 구조체에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 public
- 클래스에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 private
'Language&Framework&Etc > C++' 카테고리의 다른 글
클래스의 완성(04-4) 클래스와 배열 그리고 this 포인터 (0) | 2021.01.10 |
---|---|
C/C++ 내용 정리 (0) | 2021.01.09 |
클래스의 완성(04-3) 생성자(Constructor)와 소멸자(Destructor)-2 (0) | 2020.12.28 |
클래스의 완성(04-3) 생성자(Constructor)와 소멸자(Destructor)-1 (0) | 2020.12.25 |
클래스의 완성(04-2) 캡슐화(Encapsulation) (0) | 2020.12.25 |