๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[๊ฐ์ฒด์˜ ์ฐธ์กฐ, ๋ณต์‚ฌ ์ƒ์„ฑ์ž] ์ฐธ์กฐ reference ๋ณ€์ˆ˜ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/C++

[๊ฐ์ฒด์˜ ์ฐธ์กฐ, ๋ณต์‚ฌ ์ƒ์„ฑ์ž] ์ฐธ์กฐ reference ๋ณ€์ˆ˜

์ง•์ง•์•ŒํŒŒ์นด 2024. 2. 24. 00:29
728x90
๋ฐ˜์‘ํ˜•

<ํ™ฉ๊ธฐํƒœ ๋‹˜์˜ ๋ช…ํ’ˆ C++ Programming ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

๐Ÿ ์ฐธ์กฐ reference
ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด * ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ
์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด & ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณ„๋ช… (alias)

โ˜‘๏ธ ์ฐธ์กฐ ๋ณ€์ˆ˜
์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ (์›๋ณธ ๋ณ€์ˆ˜๋กœ ์ง€์นญ) ์— ๋Œ€ํ•œ ๋ณ„๋ช…
์ฐธ์กฐ์ž & ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ, ์„ ์–ธ ์‹œ ๋ฐ˜๋“œ์‹œ ์›๋ณธ ๋ณ€์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค

์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๋ฉด ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ด๋ฆ„๋งŒ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ณ„๋„์˜ ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐํ™”๋กœ ์ง€์ •๋œ ์›๋ณธ ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค

โ˜‘๏ธ์ฐธ์กฐ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ํฌ๋‹ˆํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ refn.setRadius(30) ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค
int *p = &refn;

โ˜‘๏ธ์ฐธ์กฐ ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ
์ดˆ๊ธฐํ™”๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
์ฐธ์กฐ์ž 7์˜ ์œ„์น˜์— ๋ฌด๊ด€ํ•œ๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

// ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ
#include <iostream>
using namespace std;

int main()
{
    cout << 'i'
         << '\t'
         << 'n'
         << '\t'
         << "refn" << endl;
    int i = 1;
    int n = 2;
    // ์ฐธ์กฐ ๋ณ€์ˆ˜ refn ์„ ์–ธ, refn ์€ n ์— ๋Œ€ํ•œ ๋ณ„๋ช…
    int &refn = n;

    n = 4;
    refn++;
    cout << i << '\t' << n << '\t' << refn << endl;

    refn = i;
    refn++;
    cout << i << '\t' << n << '\t' << refn << endl;

    // ์ฐธ์กฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์„ ์–ธ
    // p ๋Š” refn ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง. p ๋Š” n ์˜ ์ฃผ์†Œ
    int *p = &refn;
    *p = 20;
    cout << i << '\t' << n << '\t' << refn << endl;
}

/*
i       n       refn
1       5       5
1       2       2
1       20      20
*/

/*
- ์ฐธ์กฐ reference
ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด * ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ
์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด & ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณ„๋ช… (alias)

- ์ฐธ์กฐ ๋ณ€์ˆ˜
์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜ (์›๋ณธ ๋ณ€์ˆ˜๋กœ ์ง€์นญ) ์— ๋Œ€ํ•œ ๋ณ„๋ช…
์ฐธ์กฐ์ž & ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ, ์„ ์–ธ ์‹œ ๋ฐ˜๋“œ์‹œ ์›๋ณธ ๋ณ€์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ํ•ด์•ผ ํ•œ๋‹ค

์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๋ฉด ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ด๋ฆ„๋งŒ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ณ„๋„์˜ ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐํ™”๋กœ ์ง€์ •๋œ ์›๋ณธ ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค

- ์ฐธ์กฐ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ํฌ๋‹ˆํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ refn.setRadius(30) ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค
int *p = &refn;

- ์ฐธ์กฐ ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ
์ดˆ๊ธฐํ™”๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
์ฐธ์กฐ์ž 7์˜ ์œ„์น˜์— ๋ฌด๊ด€ํ•œ๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค
์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
*/

 

๐Ÿ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ

// ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ
#include <iostream>
using namespace std;

class Circle
{
    int radius;

public:
    Circle() { radius = 1; }
    Circle(int radius) { this->radius = radius; }
    void setRadius(int radius) { this->radius = radius; }
    double getArea() { return 3.14 * radius * radius; }
};

int main()
{
    Circle circle;
    // circle ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ ๋ณ€์ˆ˜ refc ์„ ์–ธ
    Circle &refc = circle;
    refc.setRadius(10);
    // ๋‘ ํ˜ธ์ถœ์€ ๋™์ผ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ˜ธ์ถœ
    cout << refc.getArea() << " " << circle.getArea();
}

// 314 314
728x90
๋ฐ˜์‘ํ˜•
Comments