C++/๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP)

Friend๋Š” private ํด๋ž˜์Šค ๋ฉค๋ฒ„์— ์ ‘๊ทผ๊ถŒํ•œ์ด ์žˆ๋Š” ํ•จ์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค๋Š” ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. (์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์˜ ์†์„ฑ ๋˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.) ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ํ˜น์€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ฉ”์†Œ๋“œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค์ผ ๊ฒฝ์šฐ, ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋ชจ๋“  private ๋ฉค๋ฒ„๋“ค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ํ•œ๋งˆ๋””๋กœ, friend๋Š” ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง„, ํด๋ž˜์Šค ๋ฉค๋ฒ„๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. friend ๊ด€๊ณ„๋Š” friend ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค์˜ ์ •์˜๋ฅผ ํ•  ๋•Œ ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, friend ๊ด€๊ณ„๋Š” ์–‘๋ฐฉํ–ฅ์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. A๊ฐ€ B์˜ friend๋ผ๊ณ ..
ํด๋ž˜์Šค ๋ฉค๋ฒ„๋“ค๋„ static ๊ฐœ๋…์„ ์ ‘๋ชฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ํ•œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ์ด ๊ฐ์ฒด์˜ ์ˆ˜๋ฅผ ์–ป๊ณ  ์‹ถ์„๋•Œ์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. int Player::get_num_players() { return num_players;// num_players๋Š” Player ํด๋ž˜์Šค ๋‚ด์˜ static ์ •์ˆ˜ } ํ—ค๋” ํŒŒ์ผ์—์„œ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ , ํŠน์ • attribute๋ฅผ static ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ํ•ด๋‹น ์†์„ฑ์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™”๋Š” .cpp ํŒŒ์ผ์—์„œ ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค์˜ ์ •์˜ ๋‚ด์—์„œ ๋ฐ”๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. // Static class members // main.cpp #include #include "Player.h" using namespa..
C++์—์„œ๋Š” ํด๋ž˜์Šค์—๋„ ์ƒ์ˆ˜ (const) ๊ฐœ๋…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. const๊ฐ€ ์ ์šฉ๋œ ํด๋ž˜์Šค๋Š” ์†์„ฑ(attribute)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์†์„ฑ์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? const Player villain {"Villain", 100, 55}; villain.set_name("Thanos");// COMPILER ERROR std::cout
this ํฌ์ธํ„ฐ๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— *this ๋กœ ์ ‘๊ทผํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ํด๋ž˜์Šค ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (ํŒŒ์ด์ฌ์„ ๊ณต๋ถ€ํ•ด๋ณด์…จ๋‹ค๋ฉด self ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๊ฐํ•˜์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๋น ๋ฅผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.) ์˜ˆ์‹œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. void Account::set_balance(double balance){ this->balance = balance; } ์ž…๋ ฅ ์ธ์ž๋ฅผ balance_input ์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๊ณ  balance = balance_input ์œผ๋กœ ํ•ด๋„ ๋˜์ง€๋งŒ, ์œ„์™€๊ฐ™์ด ๊ฐ์ฒด ์Šค์Šค๋กœ์˜ balance๋ฅผ this๋กœ ํ‘œ๊ธฐํ•˜์—ฌ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
Chan Lee
'C++/๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก