cpp_deep_shallow - 8BitsCoding/RobotMentor GitHub Wiki

DeepShallowCopy

์–•์€ ๋ณต์‚ฌ(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๋„ ๋ณ€๊ฒฝ์ด ๋˜๋Š”์ง€๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ์„ ๋ณด์ž

DeppShallow1


๊นŠ์€ ๋ณต์‚ฌ(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์€ ๋ณ€๊ฒฝ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
}

DeppShallow2


์ฐธ๊ณ ์‚ฌ์ดํŠธ
์œ ํˆฌ๋ถ€

โš ๏ธ **GitHub.com Fallback** โš ๏ธ