- 8.1.1 객체지향 프로그래밍이 아닌 코드의 경우
- 8.1.2 객체지향 프로그래밍
- 8.1.3 인스턴스(instance)
8.1.1 객체지향 프로그래밍이 아닌 코드의 경우
객체지향 프로그래밍이 아닌 기존의 C/C++ 코드를 보고 객체지향 프로그래밍으로 넘어가 보자. 친구에 대한 다양한 정보(이름, 주소, 나이, 키, 몸무게)를 저장하고 출력하고자 한다. 이럴 경우 가장 가볍게 생각할 수 있는 것이 구조체이다. 단순히 친구 한 명이라면 main 함수에 각 정보를 담을 메모리를 할당하고 출력하면 되겠지만 친구가 여러 명이 생길 수 있을 것이라 생각하자.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Friend
{
string name;
string address;
int age;
double height;
double weight;
};
void print(const Friend& fr)
{
cout << fr.name << " " << fr.address << " "
<< fr.age << " " << fr.height << " " << fr.weight << endl;
}
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
print(jj);
return 0;
}
이처럼 구조체를 하나 만들어서 초기화하고 출력 함수를 구현할 수 있겠다.
여기까지만 해도 나름 깔끔하게 잘 만들었지만 print 함수가 너무 지저분해 보인다. 이를 줄이고 싶어서 구조체 안에 print 함수를 넣어서 정리한다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Friend
{
string name;
string address;
int age;
double height;
double weight;
void print()
{
cout << name << " " << address << " "
<< age << " " << height << " " << weight << endl;
}
};
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
jj.print();
return 0;
}
이제 print 함수의 매개변수도 사라지고 출력 부분에서 구조체 내부의 데이터에 접근하기 위하여 불필요한 코드도 사라졌다. 이 정도면 나름 잘 정리한 것 같은데...?
8.1.2 객체지향 프로그래밍
이제 C++에서 말하는 객체지향 프로그래밍의 기본적인 구조를 한번 살펴보자. 데이터와 기능이 묶여 있는 것을 객체라고 말한다. 이런 객체(object)를 프로그래밍으로 구현한 것이 class이다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Friend
{
public:
string name;
string address;
int age;
double height;
double weight;
void print()
{
cout << name << " " << address << " "
<< age << " " << height << " " << weight << endl;
}
};
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
jj.print();
return 0;
}
이전 코드 블럭과의 차이점은 두 가지다. struct 키워드 대신 class 키워드를 썼다는 점, class 시작 부분에 public:이라는 키워드가 붙었다는 점이다.
많은 사람들이 처음 클래스를 접하게 되면 구조체로도 비슷하게 구현이 가능한데 굳이 클래스로 구현해야 하는 것인가라는 의문점을 가지게 된다. 클래스의 경우 public이라는 access specifier라는 것 덕분에 많은 추가적인 이점을 가질 수가 있다. 구조체는 기본적으로 public이지만 클래스의 경우 private이나 protected로 설정이 가능하다. 이 부분은 다음 포스팅에서 다루도록 하겠다.
일반적으로 프로그래밍을 하면 구조체는 데이터만 담고 클래스에는 데이터와 기능을 함께 담는다.
8.1.3 인스턴스(instance)
객체지향 프로그래밍에 대해 다루다 보면 인스턴스와 클래스의 개념이 혼동될 수 있다. 객체는 데이터와 기능을 담아두어서 추상화시킨 구조일 뿐 물리적으로 메모리를 지니고 있는 존재는 아니다. 반면 인스턴스는 물리적 메모리 주소를 할당받은 것이고 구조체가 지닌 데이터나 기능을 사용할 수 있는 존재이다.
int main()
{
Friend jj{ "Jack Jack", "Uptown", 2, 30, 10 };
jj.print();
return 0;
}
이 코드에서 jj가 인스턴스이다. 이처럼 메모리를 가지기 시작하는 것을 instanciation이라고 부른다.
'Programming Language > C++' 카테고리의 다른 글
Section 8.13. 익명 객체 (0) | 2022.01.28 |
---|---|
Section 8.2. 캡슐화, 접근 지정자, 접근 함수 (0) | 2022.01.19 |
Section 4.7. 열거형 타입 enum (0) | 2021.11.28 |
Section 4.6. string 문자열 사용 (0) | 2021.11.27 |
Section 4.5. 암시적 형 변환과 명시적 형 변환 (0) | 2021.11.16 |