์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
์ถ์ฒ :๋ฌ๊ฑ๋ค ๊ฐ์ธ ์์นด์ด๋ธ :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ํค์๋๋ ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋๋ฐ ์์ด์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ด ์ง๋์ง ๋ชปํ๋ ์ ์ฐ์ฑ์ ๊ฐ์ ธ๋ค ์ค๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ค์ํ ๊ฒ์ ์ ์ฉํ๋ ์์ ์ด ์ธ์ ์ธ์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ด๋ค.