본문 바로가기
!?/C++

클래스 1

by Where's my namespace 2012. 8. 16.

클래스1 에서는 클래스의 정의, 생성자, 생성자 초기화 리스트, 소멸자 , 접근권한, 접근자, 정적멤버에 대해 다룰까한다.

 

우선 클래스란 앞서 구조체에 대해 공부한 적이 있다.  구조체의 경우 변수만 멤버로 가질 수 있었다. 사실 C++로 올라오

 

오면서, 구조체도 클래스가 할 수 있는 왠만한 기능들은 다 할 수 있다. 다만 C와 혼용 사용때 오류 발생을 막기위해서

 

사용하지 않는다.

 

클래스의 정의를 살표보자.

 

class 클래스명 {

public:

내용;

}

 

구조체의 정의와 큰 차이는 없지만 중간에 public 이 있다. 이는 접근권한에 관한 내용이므로 나중에 설명하겠다.

클래스의 정의는 간단하다.  클래스는 어떻게 쓰느냐에 따라서 무궁무진한 가능성이 있다.

 

생성자에 대해 알아보자. 생성자라고 하면 클래스가 생성됐을 때, 그때 생성후 바로 실행되는 함수이다.

왜 이 기능을쓰느냐? 간단하다. 매번 클래스 변수를 초기화를 직접해줄 필요도없이 생성자로 가능하기 때문이다.

사용해보면 정말 어마어마한 기능이구나를 느끼게 된다.

사용법을 알아보자.

class 클래스명 {

public:

클래스명() {

내용

}

위와 같이 사용 할 수 있다. 생성자는 클래스명과 똑같은 이름을 지닌 함수다. 생성자에 인자를 넣을수도 있고, 생성자 또한 오버로딩이 가능하다.

아주 간단한 생성자의 예를 보자.

class cla {

public:

int x, y;

cla() {

x = 0;

y = 0;

}

}

아주 간단하다. 이제 저 클래스를 생성하면 기본적으로 x = 0 , y = 0 으로 초기화 된다. 물론 생성자에 시그니쳐를 받아서 초기화 하는 것도 가능하다.

cla( int xx, int yy) {

x = xx;

y = yy;

}

와 같은 생성자도 물론 가능하고 위와 같은 생성자를 쓸려면 메인함수 내에서 클래스 객체를 생성할 때

cla c1(10, 20);

과 같이 정의 해주면 된다. 

 

이제 생성자 초기화 리스트가 무엇인지 알아보자. 

 

생성자 초기화 리스트는 변수에 const 속성이 붙거나, 레퍼런스 타입의 변수 초기화에 사용된다. 이 변수들은 처음 초기화를 하지 않으면 추후에는 초기화를 할 수 없다. 그래서 무조건 생성자에서 초기화를 해주어야한다. 하지만 위에서 배운 방법으로는 초기화를 할 수 없고, 생성자 초기화 리스트를 사용해야 한다.  

사용법을 살펴보자. 

cla() 

:x(10), y(0) {

생성자 내용;

}

위와 같은 방법으로 사용하면 된다. 생성자 함수 옆에 " : " 를 사용한후 "변수명(초기화할 값)" 으로  사용하면 된다,

내용에서 한가지 중요한 사실을 빼먹었는데, 생성자나 소멸자의 경우 public 에 써야한다. 추후에 설명하겠지만 접근권한에 따라, public , private, protected 의 접근권한 설정이 있는데 public 빼고는 모두 외부에서 접근이 불가능하다.

만약 생성자를 private에 사용했고, 메인함수 내에 클래스 객체를 만들었다면, 외부에서 접근이 안되기때문에 생성자를 호출 할 수 가 없다.

 

이제 소멸자에 대해 살펴보자.

소멸자는 생성자와는 반대이다. 그리고 아주 중요한 차이는 소멸자는 오버로딩으로 같은이름의 함수를 만들수가 없다. 무조건 한 클래스에 1개만 존재한다. 사용법을 살펴보자.

~생성자명() {

내용

}

과 같은 방법으로 사용한다. 소멸자는 생성자이름에 "~" 모양을 써서 사용한다. 생성자의 경우 클래스가 종료되면 자동적으로 실행되는 코드이다. 예를 들어 동적으로 할당한 메모리를 정리하는 용도로 사용 할 수 있다. 나머지는 함수를 생성하는 만들면 된다.

 

접근권한에 대해 알아보자.

 

접근권한은 쉽게 말해 클래스 내부에 구현한 멤버변수, 멤버함수에 대해 외부에서 접근 할 수 있는지 없는지를 설정하는 것이다.  접근권한에 관해서는 아주 간단하게만 설명하겠다.

public  은 외부에서 접근가능하다.

private, protected 는 외부에서 접근이 불가능하다.

만 알고 넘어가겠다.

 

접근자에 대해 알아보자.

 

접근자는 private 와 같이 외부에서 접근이 불가능한 함수나 변수에 접근 할 수 있게하는 멤버함수이다. 이 함수는 public에 생성되서 외부에서 접근이 가능하게 중간 다리역할을 한다고 생각하면 된다.

쉽게 생각해서 접근자라고 해서 특이하게 있는것이 아니라, public내에 함수를 만들어서 클래스 내부 변수에 접근하는 것이다. 

예륻들어

class cla {

public :

void setX(int value) {

x = value;

}

private :

int x = 0;

}

과 같은 클래스가 있다고 하자, 외부에서는 x 변수에 접근할 수 없지만, 내부에있는 함수인 setX를 거쳐서 접근하면 가능하다. 쉽게 생각하면 A,B, C 가 있다고 하자, A는 B만 알고 C를 모르지만 B는 둘다 알고있다. 어느날 A는 C에게 부탁할 일이 생겼다. 하지만 A는 C를 모르니 막연히 부탁할수는 없어서 B를 통해서 C에게 부탁했다.  이 경우 B가 접근자가 된다. 접근자란 그런 것이다.

 

 

정적 멤버에 대해 알아보자.

 

정적멤버는 클래스가 소유한 멤버이다. 쉽게 말해 한 클래스에서 나온 모든 객체가 공유하는 멤버로 생각 하면된다.

사용법을 살펴보자.

static 변수형 변수명or함수명();

와 같이 클래스 내부에 만들면 된다. 중요한 점은 모든 객체에서 공유 되는 변수,함수라는 점을 생각해야한다.

예를들어 count = 0 인 정적 멤버변수가 있는데, 어떤 객체s1 에서 count ++; 를 해주었다. 그럼 count = 1이 된다.

이를 s2 객체에서 count 를 읽어도 count = 1 이다.  즉 어떤 객체에서든지 간에 같은 변수를 본다고 생각하면된다.

 

이번 클래스는 여기까지만 다루겠다.

'!? > C++' 카테고리의 다른 글

클래스 상속과 포함.  (0) 2012.08.28
클래스 2  (0) 2012.08.19
문자열(string)  (1) 2012.08.12
동적메모리 할당  (0) 2012.08.11
함수의 포인터  (0) 2012.08.11