posted by WizardMania 2013. 4. 15. 10:09

일반적으로 const는 해당 변수를 상수화 한다고한다. (값의 변경 불가)

하지만 쓰이는 곳에따라 의미가 조금씩 다르다고 할 수 있다.




기본자료형 변수 에서의 const


const int num = 10;

num 변수는 상수화 되어 다른값의 대입이 불가능 하다.

num = 20; 같은 대입이 불가능하다. (값을 가져와 쓰는것만 가능하다.)


변수 생성과 동시에 값이 초기화 되어야한다.


const int num;           // 불가능 초기화값이 존재하지 않는다.

const int num = 20;    // 가능 초기화값이 존재한다.




포인터 에서의 const


const가 포인터 앞에붙냐 뒤에붙냐에 따라 나뉘게 된다.


const int* pNum = #

pNum 변수를 참조해서 값의변경이 불가능 하다.

*pNum = 10; 불가

num변수를이용하여 값을 변경 하는것은 가능하다.

num = 10; 가능


int* const pNum = #

포인터 변수 pNum에 다른 주소값으로 변경이 불가능 하다.

pNum  = &num2; 불가

pNum 변수를 참조해서 값의 변경은 가능

*pNum = 20; 가능


물론 위의 두개를 동시에 사용할 수 도 있다. (위두가지 특성을 모두 가지게 된다)

const int* const pNum = #




예제 클래스

class SimpleClass
{
public:
	int num1;
	int num2;

	SimpleClass()
		: num1( 0 ), num2( 0 )
	{
	}

	int Function1()
	{
		num1 += 10;
		return num1;
	}

	int Function2() const
	{
		// 이함수 내에서 멤버변수의 변경 불가
		return num2;
	}
};

const 멤버함수


class의 const 멤버함수는 함수내에서 멤버변수의 값이 변경되는것을 막는다.

또한 외부에서 멤버변수의 변경가능성이 존재하는 포인터, 레퍼런스로 리턴하는것도 불가능 하다. 

함수이름 뒤쪽에 const를 붙여준다.


int Function2() const 

{

return num2;

}


다음과 같은 멤버변수 변경이 불가능 하다.

int Function2() const 

{

num2 += 10;    // 불가능

return num2;

}


객체에서의 const


const 객체는 멤버변수 값의 변경이 불가능하며 const 멤버 함수만 호출 가능 하다.


const SimpleClass* simple1 = new SimpleClass;

simple1->Function1()  // 불가능

simple1->Function2()  // 가능

simple1->num1 = 10;   // 불가능




mutable


해당멤버 변수는 const멤버함수 내에서의 값의 변경이 허용된다.

멤버변수 num2 가 mutable int num2; 으로 선언되어있다면  불가능 했던 아래코드가 가능하다.

int Function2() const 

{

num2 += 10;    // 가능

return num2;

}


const 함수가 무의미해질 수 있기 때문에 특별한 경우가 아니라면 사용을 안하는 것이 좋다.




const_cast


c++에서 추가된 형변환 연산자이다.


포인터와 참조자의 const를 제거 하는 목적으로 사용된다.

const 를 사용하게되면 위에서봤던 제약조건들이 생기게된다.

유일하게 const_cast로 const 성향을 없애줄 수 있다.


const SimpleClass* simple1 = new SimpleClass;

SimpleClass* simple2 = const_cast<SimpleClass*>(simple1);    // const가 제거된다

simple2->Function1();    // const가 제거되었기 때문에 const멤버함수가 아닌 함수도 호출가능

simple2->num1 = 5;        // const가 제거되었기 때문에 public 멤버 변경가능


무분별한 사용은 const를 무의미하게 하기때문에 특별한 용도로만 쓰는 것이 좋다.




const의 중요성


posted by WizardMania 2010. 9. 1. 00:19


역활에 따른 분류

탱커 (Tanker)
힐러와 함께 파티의 주축을 구성하는 클래스.
게임내 높은 체력과 방어력을 가졌으며 어그로를 끌어올수있는 스킬(타운트 스킬)을 보유한다.
대부분 한손무기와 방패를 착용하며, 몹이 다른파티원에게 공격하지 못하게 어그로 관리가 중요하다. 
한파티내에 탱커가 둘이상이면 메인탱커 서브탱커로 분류하기도 한다.
또한 방어력은 탱커보다 떨어지나 뎀딜이나 보조능력을 높인 서브탱커만 할수있는 클래스가 존재하기도 한다.

힐러 (Healer)
탱커와 힐러는 일반적인 파티의 기본구성 클래스라 할수있다.
일반적으로 다수의 HP회복스킬을 가지며 파티원의 각종 능력을 올려주는 버프도 다수보유한다.
힐러의 생존이 파티의 생존을 좌우하므로 파티플레이시 가장 중요한 클래스라 할수있다. 

데미지 딜러 (Damage Dealer)
줄여서 딜러 라고도 부르며, 강한 공격력으로 탱커가 탱킹하고있는 몹을 빠르게 잡는 역활을 한다.
일반적으로 원거리형 데미지 딜러는 마법사류, 활을사용하는 아쳐계열등이 있으며 접근형 데미지딜러는 어쎄신류 또는 쌍수나 양손무기를 쓰는 클래스 등을 칭한다.

누커 (Nuker)
강력한 공격력을 가진클래스를 지칭하며 데미지 딜러 이상급을 말한다.
보통 마법사류를 다른 데미지딜러와 차별하여 누커라 부르는 경우가 많다.

밀리 (Melee)
접근전을 하는 클래스를 총칭

캐스터 (Caster)
마법을 사용하는 클래스를 총칭

하이브리드 (Hybrid)
접근전과 마법을 같이 보유한 클래스를 총칭


행동, 사냥 관련

어그로(aggro)
몹의 화남정도.
일반적인 사냥에서 어그로 수치가 가장높은 플레이어에게 몹이 공격하게된다.
어그로수치는 몹이 받은데미지, 타운트스킬로 인한증가, 자신을 공격하는 플레이어에게 힐을 한 수치등으로 인해 오르게된다.
어그로는 파티플레이시 각 클래스간의 역활분담을 되게 하는 가장 기본적인 시스템이라 할수있다.
탱커는 몬스터가 자신을 공격하도록 어그로를 끌어와야하며(타운트), 다른클래스들은 자신이 공격받지않도록 어그로 관리를 해야한다.
딜링이 너무강해 자신한테 몹이붙는경우 오버딜, 힐링이 강할경우 오버힐 이라고 부른다.

타운트(Taunt)
몹의 어그로 수치를 높여 자신을 공격하게 만드는것.
파티내 탱커의 중요한 역활이며 대부분의 게임에서 탱커는 어그로 수치를 높이는 타운트스킬을 보유한다.
탱커가 아닌 파티원의 실수로 어그로를 가져갔을때나, 몹이 애드되었을때등 얼마나 타운트를 잘하느냐에 따라 탱커의 실력이 좌우된다.

디타운트(DeTaunt)
타운트의 반대 되는 개념.
몹의 어그로 수치를 낮춰주는 역활을 해주며, 딜러 역활을하는 클래스들이 가지고 있는경우가 많다.

풀, 풀링(pull, pulling)
파티사냥시 안전한 장소에서 원거리공격으로 몬스터를 끌어오는 행위.
이런 역활을 맡은 파티원을 풀러(puller)라고 부른다.

애드(add)
플레이어가 이동하거나 주변을 돌아다니는 몹에 의해 의도치않게 몹에게 공격당하는 것을 말한다.
파티사냥시에는 주의해야 하는것 중에 하나다.

PL(Power Leveling)
흔히 우리나라에서 쫄파티 혹은 쩔파티 라고 불리는것. 고렙이 저렙을 키워주는 행위

팩션(Faction)
뜻은 당파, 파벌이지만 일반적으로는 평판, 호감도 라고 불리며 해당지역, 혹은 집단에 우호적인지 적대적인지를 나타내게 된다.
사냥 혹은 퀘스트에 이 수치가 변경되는것이 일반적이다.



스킬 마법관련

버프 (Buff)
대상에게 이로운 효과를 주는 마법 (대상은 주로 아군)
종류에는 각종능력치, 공격력, 공격속도, 방어력, 속성공격, 저항 등등 단일혹은 복합적으로 상승시켜준다. 

디버프 (DeBuff)
버프와 반대개념
각종능력치등을 하락시킨다. (대상은 주로 적대대상)

군중제어 (Crowd Control)
줄여서 CC 라고 부르며 스턴, 슬로우, 침묵등 행동의 제약을 가하는 다양한 스킬, 마법등을 CC라 부른다.

스턴(Stun)
기절상태. 일정 시간 이동과 공격등 아무 동작도 할수 없는 상태가 된다. 또한 공격을 받더라도 깨어나지 않는게 일반적이다.

슬립(Sleep)
아무 동작도 할수 없는 상태가 된다는점에서 스턴과 비슷하나, 일반적으로 수면은 공격을 받게되면 깨어난다.

메즈(Mesmerize)
Mesmerize를 줄여 메즈라고 부른다. 위의 슬립과 역활은 동일하다고 보면된다.

루트(root)
일정 시간동안 이동을 하지 못하게 된다. (뿌리를 의미하는 단어로 뿌리에 감겨 이동을 못한다고 생각하면된다.)
하지만 이동이외의 근접공격, 원거리공격, 주문 등의 행동을 할수 있는게 일반적이다.
게임에 따라서 공격받으면 풀리게되는 경우도 있다.

스네어(Snare), 슬로우(Slow)
일정 시간동안 이동속도가 저하된다.
그점을 제외하고 다른 동작들은 모두 가능하다.

침묵(silence)
일정 시간 주문, 스킬등을 사용 할수 없는 상태가된다.

컨퓨즈(Confuse)
대상을 혼란스럽게 하여 아무나 공격하게 만든다.

레즈(resurrection, rez)
resurrection(부활)을 줄여 rez라 부른다. (부활마법)

데미지 실드(Damage Shield)
피해를 받으면 일정 피해를 공격한 적에게 되들리는 주문.

블레이드턴(Bladeturn)
줄여서 BT 혹은 버블(Bubble)이라고도 한다.
자신에게 가해지는 물리공격 1회를 무효화시키는 버프 마법.

DD(Direct Damage)
주문시전이 끝나면 상대방에게 데미지를 주는 마법.

도트(DOT, damage over time)
일정 시간 마다 데미지를 준다.
일반적으로 독, 출혈등이 해당된다.

AEDD(Area Effect Direct Damage)
목표를 기준으로 목표를포함한 주변대상까지 데미지를 주는 마법.
AoE(Area of Effect) AE 라고도 부른다.

PBAEDD(Point Blank Area Effect Direct Damage)
시전자를 중심으로 데미지를 입히는 마법.

인스턴트 스펠(Instant Spell)
즉시 사용할수 있는마법 일반적으로 마법은 시전시간(캐스팅)이 필요한데 인스턴드 스펠은 시전시간이 존재 하지않는다.