본문 바로가기
프로그래밍/C++

클래스의 활용

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 20.




누가 그랬던가, C++로 제작이 가능한 모든것은 C로도 제작이 가능하다고,

물론 맞는 말이지만,

추후 그 프로그램을 수정할때의 시간은 확실히 차이가 난다고 생각한다.

클래스의 활용법에 대해서 알아보자.

클래스를 선언할 때에

public:
private:
protected: 가 존재 하지만

일반 적으로 public:에는 함수 선언을 많이 하고
private:에는 변수 선언을 많이 하게 된다.

왜 그럴까?

소스 코드를 보자.

#include <iostream>

class AAA
{
	// 기본적으로 아무 것도 설정해 주지 않으면 private:
	int n;

public:
	int GetN();		// N의 값을 return 받기 위해
	void SetN(int tmp);	// N에, 값을 넣기 위해
};

void main()
{
	// 만약 사용자가 입력해야 하는 값이 1~100 까지라고 하자.
	// 사용자가 1 미만, 100 초과의 값을 입력 했다고 했을 때,
	// 프로그래머가 의도한 상황이 아닌 결과물이 나올 수 있다.

	AAA aaa;
	int tmp;

	std::cout << "N의 값 입력(1~100) : " << std::endl;

	//	std::cin >> aaa.n;
	//	std::cout << aaa.n;
	// 만약 n이 public: 이라면 이렇게 값을 받아도 아무 문제 없고
	// 어찌 보면 더 편할 수도 있다.
	// 하지만 의도하지 않은 상황을 애초에 막기 위해 Get,Set 함수를 써주는 것.

	std::cin >> tmp;
	aaa.SetN(tmp);
	std::cout << aaa.GetN() << std::endl;
}

void AAA::SetN(int tmp)
{
	if( tmp < 1 || tmp > 100 )
	{
		std::cout << "올바른 숫자값이 아닙니다." << std::endl;
		n = 1;	// 최소 값으로 지정 return을 해주어도 상관없다.
	}
	else
		n = tmp;
}
int AAA::GetN()
{
	return n;
}



자 그럼 단순히 원치 않은 값의 예방을 위해서만 클래스를 쓰는가?

그건 아니다.


#include <iostream>
#include <string.h>

class AAA
{
	char* ch;

public:
	AAA(char* _ch)	// 생성자, AAA클래스를 제작할 때, 자동으로 동적 할당, 문자열 복사가 이루어진다.
	{
		ch = new char[strlen(_ch)+1];
		strcpy(ch, _ch);
		std::cout << ch << std::endl;
	}
	~AAA()	// 클래스가 종료 되면 자동으로 메모리도 지워준다.
	{
		delete [] ch;
	}
};

void main()
{
	AAA aaa("Test");	// main에는 단순히 선언 만으로 메모리 할당, 복사, 종료 모든 일을 하게 된다.

	// 만약 이렇게 하지 않는다면,

	// 이처럼 귀찮은 짓을 해야 한다.
	char* tmp = "Test";
	char* ch;

	ch = new char[strlen(tmp)+1];
	strcpy( ch, tmp );
	std::cout << ch << std::endl;

	delete [] ch;
	// 귀찮아도 이게 더 쉬워 보이는가?
	// 여러개의 문자열 이라면????
	// 라인 한줄만 추가 할 것인가?
	// 아니면 매번 저 귀찮은 짓을 해줄 것인가.(물론 꼭 이렇게 극단적으로 표현할 필요 까진 없지만)
}



처음 말 했듯이 C로써 제작이 불가능 하기 때문에 C++로 제작 하는건 절대 아니라고 본다.
단지 프로그래머라면(특히 게임프로그래머, 거기다 온라인)이라면 제작 보다 중요한건 유지 보수 라고 본다.
개인적으로 필자는 오래 사는 게임이 성공한 게임이라고 말 하고 싶은데,
사소한 밸런스 조정때에도 야근을 할 것인가.
클래스만 변경해 주고 조기 퇴근을 할지는 뭐,
본인 마음이겠지만
아직 나도 부족한게 많고 알아야 할것 투성이지만
C++이라는 언어는
오래 씹을 수록 더 깊은 맛이 나는 그런 느낌이랄까 ㅋ?

'프로그래밍 > C++' 카테고리의 다른 글

this 포인터  (0) 2010.03.21
객체 포인터 배열  (0) 2010.03.21
class(클래스) ~ C++의 꽃 ~  (0) 2010.03.19
레퍼런스(Reference)  (0) 2010.03.18
new & delete  (0) 2010.03.17