cpp_deep_shallow - 8BitsCoding/RobotMentor GitHub Wiki
์์ ๋ณต์ฌ(Shallow Copy) :
๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ฉค๋ฒ๋ค์ ๊ฐ์ ์๋ก์ด ๊ฐ์ฒด๋ก ๋ณต์ฌํ๋ค.
๋ง์ฝ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ์ ์ ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ฐธ์กฐ๊ฐ๋ง ๋ณต์ฌ๊ฐ ๋๋ค.
์ฝ๋๋ก ์์๋ฅผ ๋ณด์.
#include <iostream>
using namespace std;
class Person {
public:
int age;
char* name;
Person(int _age, char* _name) {
age = _age;
name = new char[strlen(_name)+1];
strcpy(name, _name);
}
// ์์ ๋ณต์ฌ ์์
Person(const Person& s)
{
age = s.age;
name = s.name;
}
// ...
};
void main() {
Person A(32, "Hyeven");
Person B = A; // ๋ณต์ฌ
A.age = 28;
strcpy(A.name, "wonjayk");
A.printPerson();
B.printPerson();
// A๋ฅผ ๋ฐ๊ฟจ์ง๋ง B์ name๋ ๋ณ๊ฒฝ์ด ๋๋ค.
}์ B์ name๋ ๋ณ๊ฒฝ์ด ๋๋์ง๋ ์๋์ ๊ทธ๋ฆผ์ ๋ณด์

๊น์ ๋ณต์ฌ(Deep Copy) :
์์ ๋ณต์ฌ์๋ ๋ฌ๋ฆฌ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ชจ๋ ๋ฉค๋ฒ(๊ฐ๊ณผ ์ฐธ์กฐํ์ ๋ชจ๋)๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ ๋งํ๋ค.
๊ฐ์ฒด๊ฐ ์ฐธ์กฐ ํ์ ์ ๋ฉค๋ฒ๋ฅผ ํฌํจํ ๊ฒฝ์ฐ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌ๊ฐ ์๋ ์ฐธ์กฐ๋ ๊ฐ์ฒด ์์ฒด๊ฐ ๋ณต์ฌ๋๋ ๊ฒ์ ๊น์ ๋ณต์ฌ๋ผ ํ๋ค.
#include <iostream>
using namespace std;
class Person {
public:
int age;
char* name;
Person(int _age, char* _name) {
age = _age;
name = new char[strlen(_name)+1];
strcpy(name, _name);
}
// ์์ ๋ณต์ฌ ์์
Person(const Person& s)
{
age = s.age;
name = new char [strlen(s.name)+1];
strcpy(name, s.name);
}
// ...
};
void main() {
Person A(32, "Hyeven");
Person B = A; // ๋ณต์ฌ
A.age = 28;
strcpy(A.name, "wonjayk");
A.printPerson();
B.printPerson();
// B์ name์ ๋ณ๊ฒฝ์ด ๋์ง ์๋๋ค.
}