์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

 

์ถœ์ฒ˜ :๋‹ฌ๊ฑ€๋„ค ๊ฐœ์ธ ์•„์นด์ด๋ธŒ :D http://yatoyato.tistory.com/883

 

C++ :: friend ์„ ์–ธ

์ „์—ญํ•จ์ˆ˜์— ๋Œ€ํ•œ friend์„ ์–ธ

private์œผ๋กœ ์„ ์–ธ๋œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€์ ‘๊ทผ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์™ธ๋Š” ์žˆ๋‹ค. friend์„ ์–ธ์„ ํ†ตํ•ด์„œ private๋กœ ์„ ์–ธ๋œ ๋ฉค๋ฒ„๋ณ€์ˆ˜์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

class counter {
    int val;

public:
    counter() {
        val=0;
    }
    void print() {
        cout<<val<<endl;
    }
    friend void setX(counter &c, int val);
};

void setX(counter &c, int val) {
    c.val=val;
}

int main(void) {
    counter cnt;
    cnt.print();

    setX(cnt, 2002);
    cnt.print();

    return 0;
}

์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€

setXํ•จ์ˆ˜๋Š” ๋ถ„๋ช… ์ „์—ญํ•จ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  counter๊ฐ์ฒด์˜ private๋ฉค๋ฒ„์ธ val์— ์ ‘๊ทผ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ ์–ธ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

friend void setX(counter& c, int val);

๋งŒ์•ฝ์— friendํ‚ค์›Œ๋“œ๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด, ๋ฉค๋ฒ„ํ•จ์ˆ˜ ์„ ์–ธ์ด ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค.

counterํด๋ž˜์Šค๋Š” ์ „์—ญํ•จ์ˆ˜ setX๋ฅผ friend๋กœ ์„ ์–ธํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ setXํ•จ์ˆ˜๋Š” counter๊ฐ์ฒด์˜ private์˜์—ญ์ ‘๊ทผ์ด ํ—ˆ์šฉ์ด ๋œ๋‹ค. ์ด๊ฒƒ์ด friendํ‚ค์›Œ๋“œ๊ฐ€ ์ง€๋‹ˆ๋Š” ์˜๋ฏธ์ด๋‹ค. friend์„ ์–ธ์€ private๋‚˜ public๊ณผ ๊ฐ™์€ ์ ‘๊ทผ์ œ์–ด ํ‚ค์›Œ๋“œ์™€๋Š” ์ƒ๊ด€์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค ๋‚ด ์–ด๋””์„œ๋“  ์„ ์–ธ๊ฐ€๋Šฅํ•˜๋‹ค.

ํด๋ž˜์Šค์— ๋Œ€ํ•œ friend์„ ์–ธ

friend์„ ์–ธ์€ ํด๋ž˜์Šค๋“ค ๊ฐ„์—๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

class AAA {
private:
    int data;
    friend class BBB;

public:
    int getData() { return data; }
};

class BBB {
public:
    void setData(AAA &aaa, int val) {
        aaa.data=val;
    }
};

int main(void) {
    AAA aaa;
    BBB bbb;

    bbb.setData(aaa, 10);
    cout<<aaa.getData()<<endl;

    return 0;
}

์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€

ํด๋ž˜์Šค AAA์—์„œ๋Š” BBBํด๋ž˜์Šค๋ฅผ friend๋กœ ์„ ์–ธํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰ AAAํด๋ž˜์Šค๋Š” BBBํด๋ž˜์Šค์—๊ฒŒ private์˜์—ญ์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์„ ์–ธ์— ํ•ด๋‹น์ด ๋œ๋‹ค.
ํ•œ๊ฐ€์ง€ ์ฃผ์˜ํ•  ๊ฒƒ์€ friend์„ ์–ธ์€ ๋‹จ๋ฐฉํ–ฅ์„ฑ์„ ์ง€๋‹Œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ, ์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” AAAํด๋ž˜์Šค๊ฐ€ BBBํด๋ž˜์Šค๋ฅผ friend์„ ์–ธํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ BBBํด๋ž˜์Šค๋Š” AAAํด๋ž˜์Šค์˜ private์˜์—ญ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค ํ•ด๋„, AAAํด๋ž˜์Šค๊ฐ€ BBBํด๋ž˜์Šค์˜ private์˜์—ญ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ ค๋ฉด BBBํด๋ž˜์Šค๊ฐ€ AAAํด๋ž˜์Šค๋ฅผ friend์„ ์–ธํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.

friend์„ ์–ธ์˜ ์œ ์šฉ์„ฑ

C++์€ ๋งŽ์€ ๋ฌธ๋ฒ•์  ์š”์†Œ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ชจ๋“  ๋ฌธ๋ฒ•๋“ค์„ ํ•ญ์ƒ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ๋Š” ๋“๋ณด๋‹ค ์‹ค์ด ๋” ํฐ ๋ฌธ๋ฒ•์  ์š”์†Œ๋“ค๋„ C++์—๋Š” ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. friendํ‚ค์›Œ๋“œ๋„ ํ•˜๋‚˜์˜ ์˜ˆ๊ฐ€ ๋œ๋‹ค.
friend์„ ์–ธ์€ ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์ค‘์š”์‹œํ•˜๋Š” "์ •๋ณด์€๋‹‰"์— ์œ„๋ฐฐ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ์ •๋ณด์€๋‹‰์ด ๋ฌด๋„ˆ์ง„๋‹ค๋Š” ๊ฒƒ์€ ์ „์ฒด์ ์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์„ฑ์ด ๋‚˜๋น ์ง„๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๊ฒฐ๊ตญ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํž˜๋“  ํ”„๋กœ๊ทธ๋žจ์ด ๋˜์–ด ๋ฒ„๋ฆฌ๊ณ  ๋งŒ๋‹ค.

๋ฌผ๋ก  friendํ‚ค์›Œ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์ด ์ง€๋‹ˆ์ง€ ๋ชปํ•˜๋Š” ์œ ์—ฐ์„ฑ์„ ๊ฐ€์ ธ๋‹ค ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ ์šฉํ•˜๋Š” ์‹œ์ ์ด ์–ธ์ œ์ธ์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•

+ Recent posts