※ LIG Nex1 The SSEN Embedded SW School에서 진행된 내용을 정리한 포스팅입니다.
객체 지향 프로그래밍
객체 지향 프로그래밍이란
- 객체를 정의
- 모델링에서 도출된 샘플을 클래스로 정의
- 객체가 갖는 2가지 종류의 관계
- 상속
- 포함
클래스 정의
일반적인 형태
class Class_name {
// 멤버 변수: 값의 저장 목적
// 멤버 함수(메서드): 기능 제공 목적
};
- 멤버 변수
- 값 저장
- 객체의 정보를 저장한다.
- 값은 변경 가능하다.
- 멤버 함수(메서드)
- 객체의 기능을 제공한다.
접근 제어자
- private
- 클래스 내에서만 접근 가능
- protected
- 상속 관계 내에서만 접근 가능
- public
- 클래스 외부에서 접근 가능
잘못된 클래스 예제
- 10개의 주소를 저장하는 Addr 클래스
class Addr {
public:
char *name[10];
char *tel[10];
char *addr[10];
}
- 클래스의 목적을 위배하고 있다.
- 캡슐화: 하나의 클래스는 하나의 객체를 저장할 수 있어야 한다.
- 개선된 클래스의 형태
class Member {
private:
string name;
string tel;
string addr;
};
class Addr {
public:
Member addr[10];
};
- 다른 클래스로 분리해야 한다.
- 이후 적절한 자료구조를 통해 다수의 멤버를 저장할 수 있도록 해야 한다.
캡슐화
- 캡슐화를 적용한 Member 클래스 예제
class Member {
private:
string name;
string tel;
string addr;
public:
//멤버 변수 값 변경
void inputData(const string &n, const string &t, const string &a);
//멤버 변수 값 출력
void printData() const;
};
객체 생성
- Stack
Member m1;
// m1.tel = "010"; Error
m1.inputData("name", "010", "addr");
m1.printData();
- Heap
Member *m2 = new Member();
m2->inputData("heap", "000", "addr");
m2->printData();
Member m1;
Memeber *p = new Member();
Member m2[3];
Member *m3[3]; // 객체가 없기 때문에 객체를 생성하여 주소를 넣어주어야 한다.
Member &m4 = *p; // 힙에 참조자 변수의 이름으로 접근 가능 -> m4.name(O)
파일 분할
- 클래스의 구현부와 선언부를 분할하는 것이 일반적이다.
- 분리가 되어있더라도 link과정을 따라 하나의 바이너리로 구성할 수 있으면 된다.
- Contact.h
class Contact
{
public:
Contact();
void insert_data(string name, string phoneNum);
int getId();
void printData();
private:
static int cnt;
int mId;
string mName;
string mPhoneNum;
};
- Conatact.cpp
int Contact::cnt = 0;
Contact::Contact()
: mId(0)
, mName("")
, mPhoneNum("")
{}
void Contact::insert_data(string name, string phoneNum)
{
mId = cnt++;
mName = name;
mPhoneNum = phoneNum;
}
int Contact::getId()
{
return mId;
}
void Contact::printData()
{
cout << " " << mId << " | " << mName << " | " << mPhoneNum << "\n";
}
※ 질문, 개선점, 오류가 있다면 댓글로 남겨주세요 :)
'Language > C++' 카테고리의 다른 글
[TheSSEN/C++] 6. static과 singleton 패턴 (0) | 2025.01.27 |
---|---|
[TheSSEN/C++] 5. 객체 지향 프로그래밍 기법 (0) | 2025.01.27 |
[TheSSEN/C++] 3. 클래스 (0) | 2025.01.27 |
[TheSSEN/C++] 2. 참조자(&) (0) | 2025.01.27 |
[TheSSEN/C++] 1. C++ 개요 (0) | 2025.01.27 |