์์๋ค์ํผ ํด๋์ค์๋ ์์ฑ attributes ์ ๋ฉ์๋ methods ๊ฐ ์กด์ฌํฉ๋๋ค.
์ด๊ฒ๋ค์ ํด๋์ค ๋ฉค๋ฒ ๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ์,
ํด๋์ค ๋ฉค๋ฒ๋ค์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
๋ฐ๋ก ๊ฐ ๊ฐ์ฒด๋ค์ ์ด๋ฆ ๋ค์ dot operator(.) ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ํ ๊ณ์ข ๊ด๋ฆฌ์ฉ Account ํด๋์ค๋ฅผ ํตํด ricky_account๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ricky_account.balance, ricky_account.deposit(double)์ผ๋ก ๊ฐ๊ฐ
์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํธ์ถํ์์ต๋๋ค.
Account ricky_account;
ricky_account.balance;
ricky_account.deposit(1000.00);
๊ทธ๋ ๋ค๋ฉด ๋์ ์ผ๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด์ ๋ํด์๋ ์ด๋ป๊ฒ ํ ๊น์?
๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
Account ricky_account = new Account; // ๊ฐ์ฒด ๋์ ์ ์ธ
// ๋ฐฉ๋ฒ 1
(*ricky_account).balance;
(*ricky_account).deposit(1000.00);
// ๋ฐฉ๋ฒ 2
ricky_account->balance;
ricky_account->deposit(1000.00);
์์ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด dot operator์ ์ฐ๋ ๋ฐฉ๋ฒ ์ธ์๋
pointer operator(arrow operator)์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํฉ๋๋ค.
ํ์ง๋ง ์์ ๊ฐ์ด ์ ๊ทผํ์ฌ ์ถ๋ ฅํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ๋ฌ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ ์ ๋๋ค.
๊ทธ๊ฒ์ ์ ๊ทผ ์ ํ์๋ฅผ public์ผ๋ก ์ค์ ํ์ง ์์์์ ๋๋ค.
class Account {
public:
double balance;
void deposit(double amount);
};
ํด๋์ค๋ฅผ ์ ์ธํ ๋ ๋ค์๊ณผ ๊ฐ์ด public: ํค์๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด,
์ธ๋ถ์์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ ํ๊ฐํฉ๋๋ค.
์ด์ ๋ํ ์์ธํ ์ ๋ณด๋ ๋ค์ ํฌ์คํธ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
๋ค์ ๋์์์, ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
#include <iostream>
#include <string>
class Player {
public:
string name;
int xp;
int hp;
void talk(string text_to_say) {
cout << name << " says: " << text_to_say << endl;
}
};
int main() {
Player ricky;
ricky.name = "Ricky";
ricky.xp = 0;
ricky.hp = 1000;
ricky.talk("Hello, there"); // Output: Ricky says: Hello, there
Player *enemy = new Player;
enemy->name = "Enemy"; // arrow operator
(*enemy).xp = 10; // dot operator
enemy->hp = 500;
enemy->talk("I Love You"); // Output: Enemy says: I Love You
delete enemy;
return 0;
}
์ค๋ ๋ฐฐ์ด ๋ฐฉ๋ฒ์ผ๋ก Player ํด๋์ค๋ฅผ ํ์ฉํ ์งง์ ์ฝ๋์ ๋๋ค.
ํด๋์ค ๋ฉค๋ฒ๋ค์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๋ค์ด ์ฝ๊ฒ ๋ํ๋์์ต๋๋ค.
์ ์ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ๋์ ํ ๋น๋ ๊ฐ์ฒด๋ค์ arrow operator์ ์ฌ์ฉํ๊ฑฐ๋ dereference ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ ๊ฒ์ ์ ์ํด์ฃผ์ธ์!