언어 자료구조 알고리즘/Escort C++

[C++]정적 멤버로 구성된 클래스 사용하기

언제나휴일 2016. 4. 15. 13:12
반응형

3. 3 정적 멤버로 구성된 클래스 사용하기

 

 C++ 언어에서는 전역 스코프가 존재합니다. 하지만 C#이나 Java와 같은 OOP 언어에서는 전역 스코프가 존재하지 않는데 이 같은 경우에 정적 클래스를 정의하여 이를 극복합니다. C++에는 전역 스코프가 존재하기 때문에 지금과 같은 작업이 불필요하다고 생각할 수도 있겠지만 이렇게 프로그래밍할 수도 있다는 것을 한 번 살펴보시고 여러분의 판단에 맞게 사용하시기 바랍니다.

 

 캡슐화 실습 주제에서 학생의 체력, 아이큐, 스트레스, 연속으로 공부하다를 수행한 카운터는 개체 생성 시에 설정할 디폴트 값과 최소값, 최대값이 약속되어 있습니다. 이럴 때 #define 문을 사용하거나 열거형이나 정적 멤버 상수 필드나 전역 상수를 이용할 수 있을 것입니다. 여기에서는 이러한 방법들이 아닌 정적인 멤버들로만 구성된 클래스를 정의하는 방법을 사용하는 것을 보여주려고 합니다. 여기에서 보여주는 방법을 사용하면 별도의 클래스를 추가하는 것이라 비용이 많이 든다고 생각할 수도 있지만 유지 보수를 할 때 목적에 따라 해당 클래스만 살펴볼 수 있기 때문에 오히려 비용이 줄어들 수 있습니다.

 

 C++에서는 static 클래스를 위한 별도의 문법은 제공하지 않고 있습니다. 하지만 편의상 static 멤버만을 가지고 있는 클래스를 static 클래스라고 하겠습니다.

 

 Stu클래스의 멤버 필드가 가질 속성값들의 약속된 값이라는 의미에서 StuProperty라는 이름으로 정적 클래스를 만들고 약속된 값들을 위해 각각 정적 상수 멤버 필드를 추가하겠습니다. 정적 멤버 필드들은 선언도 반드시 해 주어야 한다는 것을 상기하시기 바랍니다.

 

 그리고 정적 클래스 형식에서는 개체를 생성하지 못하게 생성자와 소멸자의 접근지정자를 private로 지정하면 됩니다. 마지막으로 Stu.h에서는 StuProperty.h를 포함하기 위해 다음의 코드를 추가해 주어야 할 것입니다.

 

#include "StuProperty.h"

 

 

StuProperty.h

#pragma once

class StuProperty

{

public:

    static const int def_hp;

    static const int min_hp;

    static const int max_hp;

    static const int def_iq;

    static const int min_iq;

    static const int max_iq;

    static const int def_stress;

    static const int min_stress;

    static const int max_stress;

    static const int def_scnt;

    static const int min_scnt;

    static const int max_scnt;

private:

    StuProperty(void){    }

};

 

StuProperty.cpp

#include "StuProperty.h"

const int StuProperty::def_hp = 50;

const int StuProperty::min_hp = 0;

const int StuProperty::max_hp = 100;

const int StuProperty::def_iq = 100;

const int StuProperty::min_iq = 80;

const int StuProperty::max_iq = 200;

const int StuProperty::def_stress = 0;

const int StuProperty::min_stress = 0;

const int StuProperty::max_stress = 100;

const int StuProperty::def_scnt = 0;

const int StuProperty::min_scnt = 0;

const int StuProperty::max_scnt = 5;


3장 캡슐화 실습 Part1 

3장 캡슐화 실습 Part2 

(모든 동영상 강의는 무료입니다.)

반응형