2015년 5월 11일 월요일

C++의 클래스(class) 선언

 클래스(class)는 C++에서 지원하는 객체 지향 프로그래밍의 핵심 구조로서 이것을 정의하기 위해서는 class라는 키워드를 이용한다. C++의 클래스는 C언어의 구조체(struct)와 유사하게 개발자가 정의하는 새로운 데이터 타입이다. 구조체가 변수들만을 멤버(member)로 가질 수 있는 반면 클래스는 변수와 함수 모두를 멤버로 가질 수 있다. 멤버를 접근할 때 점(.)을 이용한다는 점은 C언어의 구조체와 동일하다. 또한 멤버들의 접근 영역을 public 이나 private 키워드를 이용하여 지정해 줄 수 있다.
 클래스는 선언부(declaration)과 구현부(implementation)로 나뉜다. 다음은 클래스를 선언하고 구현하는 기본적인 예이다.
// 클래스 선언부
class Rect {
   public:
       int width, height;
       int getArea();
};
// 클래스 구현부
int Rect::getArea() {
   return width*height;
}


멤버 함수 구현을 다음과 같이 클래스 선언부에 둘 수도 있다.
class Rect
{
   public:
       int width, height;
       int getArea()
       {
           return width*height;
       }
};
일견 후자의 경우가 더 간결해 보이고 실제로 함수 본체의 길이가 짧다면 별 문제가 없다. 하지만 멤버 함수의 구현이 길어지고 이러한 멤버 함수가 여러 개라면 클래스의 전체적인 구조를 한 눈에 파악하기가 어려워지고 가독성이 떨어지게 된다. 따라서 전자와 같이 클래스의 선언부와 멤버 함수의 구현부를 분리하는 것이 더 일반적이다.


클래스 선언부


클래스는 다음과 같이 class 키워드와 이름으로 선언한다.
class Rect { // Rect 라는 클래스 선언
   ...
}; // 반드시 세미콜론(;)으로 종료
클래스 이름은 일반적인 식별자 구성 규칙에 따라 개발자가 원하는 대로 붙이며 관습상 대문자로 시작한다. 클래스 선언은 클래스의 모양을 정의하는 것으로서 멤버 함수와 멤버 변수의 원형을 선언한다. 멤버들은 “{”와 “}” 으로 감싸고 마지막에 반드시 세미콜론(;)을 붙여야 한다.

클래스 멤버



 클래스의 멤버(member)는 변수와 함수로 구성된다. 멤버 변수는 클래스 선언부에서 초기화될 수 없다. 따라서 다음과 같은 경우 오류가 발생한다.


class Rect {
   public:
       int width = 10, height = 20;
       int getArea();
};
 
멤버 함수는 원형 형태로 선언되며 함수 선언 규칙과 동일하고 반환 타입, 입력 인수의 리스트 등이 모두 선언되어야 한다. getArea() 멤버 함수는 반환형이 int 이고 입력 인수는 없는 함수의 원형이다. 멤버 함수는 함수 선언만 클래스 선언부에 두고 함수 정의는 외부에 둘 수 있으며 멤버 함수 선언과 정의 모두 클래스 선언부에 둘 수도 있다.


클래스 구현부


 클래스 구현부에서는 클래스 선언부에 선언된 멤버 함수의 실제 코드를 작성한다. 구현부에서 작성되는 멤버함수의 소속을 지정하기 위해서 함수명 바로 앞에 className ::을 앞에 붙여야 하며 이 함수가 className 의 멤버함수라는 것을 나타낸다. 앞의 예에서


double Rect::getArea() {
   return width*height;
}


여기서 더블 콜론(::) 는 ‘범위 지정 연산자’라고 하며 함수가 어떤 클래스의 멤버인지를 지정할 때 사용되는 연산자이다.

댓글 없음:

댓글 쓰기