๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

*<์”น์–ด๋จน๋Š” C++>์„ ๋ณด๋ฉฐ ๊ณต๋ถ€ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

 

 

์˜ค๋Š˜๋„ ์—ด์‹ฌํžˆ ์šฐ๋ฆฌ์˜ ์ดํ•ด๋ฅผ ๋„์™€์ค„ ๋ชฌ์Šคํ„ฐ(Monster) ํด๋ž˜์Šค!

#include <iostream>
#include <string>

class Monster {
private:
	std::string name;
	int health;
	int damage;
    
    static int totalMonsterNum;

public:
	Monster() = default;
	Monster(std::string name, int health, int damage);
};

 

 

์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ผ๋ฐ˜์ ์ธ ์ƒ์„ฑ์ž

Monster::Monster(std::string name, int health, int damage) {
	this->name = name;
	this->health = health;
	this->damage = damage;
}

 

  • ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋จผ์ € ํ•œ ํ›„, ๊ทธ ๋‹ค์Œ์— ๋Œ€์ž… ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰
  • ๊ฐ์ฒด ์ƒ์„ฑ ํ›„์— ๋Œ€์ž…์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.
  • ์ฐธ์กฐ(Reference)์™€ ์ƒ์ˆ˜๋Š” ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ์— ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ฐธ์กฐ๋‚˜ ์ƒ์ˆ˜๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด, ์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค.

 

์ดˆ๊ธฐํ™” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์ƒ์„ฑ์ž

Monster::Monster(std::string name, int health, int damage) : 
	name(name), health(health), damage(damage) {}

 

  • ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ์— ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค.
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€๋Š” ๋น„์–ด์žˆ๊ณ , ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ง€์นญํ•ด์„œ ๊ด„ํ˜ธ ์•ˆ์˜ ๋ณ€์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํŠน์ง•
  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฐ™์•„๋„ ๋œ๋‹ค. (์™ธ๋ถ€์— ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” "๋ฉค๋ฒ„ ๋ณ€์ˆ˜"๋ฅผ, ๊ด„ํ˜ธ ์•ˆ์˜ ๋ณ€์ˆ˜๋Š” "๋งค๊ฐœ๋ณ€์ˆ˜"๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ง€์นญํ•˜๋„๋ก ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ. ๋”ฐ๋ผ์„œ, this ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š” ์—†๋‹ค.)

 

 


ํด๋ž˜์Šค Static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜

 

  • ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋  ๋•Œ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ ์†Œ๋ฉธํ•œ๋‹ค.
  • Static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๊ณต์œ ํ•˜๋Š” ํ•œ ๊ฐœ์˜ ๋ณ€์ˆ˜๋‹ค.
  • Static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ํด๋ž˜์Šค์— ๋ฒ”์œ„์ง€์ • ์—ฐ์‚ฐ์ž(::)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด Static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
class Monster {
    static int totalMonsterNum;      // ์ž๋™์œผ๋กœ 0์ด ํ• ๋‹น๋œ๋‹ค.
    ...
};

int Monster::totalMonsterNum = 10;   // static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”

 

  • ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ Static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด const static ๋ณ€์ˆ˜์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
class Monster {
    const static int totalMonsterNum = 10;
    ...
};

 

  • Static ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ํŠน์ • ๊ฐ์ฒด์— ์ข…์†๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํด๋ž˜์Šค ์ „์ฒด์— ์กด์žฌํ•˜๋Š” ํ•œ ๊ฐœ์˜ ํ•จ์ˆ˜๋‹ค.
  • Static ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” static ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์–ด๋–ค ๊ฐ์ฒด์˜ ์†Œ์œ  ๋ณ€์ˆ˜์ธ์ง€ ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ)
  • Static ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ƒˆ๋กœ์šด ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค. 
class Monster {
private:
	int hp;
	static int damage;
public:
	static void Show();
};

void Monster::Show() {
	std::cout << "Static ํ•จ์ˆ˜ ํ˜ธ์ถœ" << std::endl;
	// hp = 10;  ์ผ๋ฐ˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€
	damage = 10;
}

int main() {

	Monster::Show();   // ๊ฐ์ฒด ์ƒ์„ฑ์—†์ด ํด๋ž˜์Šค์— ๋ฐ”๋กœ ์ ‘๊ทผํ•˜์—ฌ ํ˜ธ์ถœ
	return 0;
}

 

 

728x90
๋ฐ˜์‘ํ˜•