[C++] #1 클래스 (Class)

    반응형

    클래스란 객체지향 프로그래밍(OPP)에서 객체를 생성하기 위한 멤버변수(상태)와 멤버함수(행동)을 정의하는 틀과 같은 역할을 수행한다.

    객체지향 프로그래밍은 모든 데이터를 객체로 취급하며, 이러한 객체들의 조합으로 코드를 작성하는 프로그래밍 기법이다.

    클래스는 C언어의 구조체(Struct)와 상당히 유사한데 차이점은 접근제어 지시자(access specifier)가 추가되었다는 점과, 멤버함수(행동)을 포함할 수 있다는 것이다. 이번 포스팅에서는 C++에서 새롭게 추가된 클래스라는 문법과 접근 제어 지시자에 대해 간략하게 정리해 보고자 한다.

     

    * 개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다.

     

    #1 클래스 _ class

    #2 접근 제어 지시자 _ access specifier


    #1 클래스 _ class

    클래스의 정의는 다음과 같다.

    class 클래스 이름 {
    접근제어지시자:
    	멤버 변수(상태), 멤버 함수(행동)..
    };

    클래스는 멤버 변수(상태)멤버 함수(행동)으로 이루어 진다. 주의 해야할 점은 마지막에 꼭 세미콜론(;)을 붙여 주어야 한다.

     

    아래 코드는 class 문법을 사용한 간단한 예제이다. Player 라는 이름의 클래스를 만들고 멤버 변수(상태)에는 m_name, m_level, m_hp, m_mp, m_atk를 멤버 함수(행동)에는 attack()을 정의 하였다. 객체 생성은 "클래스명 객체이름 {}" 과 같은 유니폼 초기화 형식으로 생성할 수 있다. 

    클래스의 멤버는 . 을 이용해 접근할 수 있으며, "객체이름.멤버변수/멤버함수" 처럼 사용하면 된다.

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Player {
    public: // 접근 지정자 (access specifier)
    	// 멤버 변수(상태)
    	string m_name;
    	int m_level;
    	int m_hp;
    	int m_mp;
    	int m_atk;
    	// 멤버 함수(행동)
    	void attack()
    	{
    		cout << m_name << " attack!" << endl;
    	}
    };
    
    int main() {
      	Player warrior {"Warrior", 10, 100, 10, 20};
    	Player mage {"Mage", 8, 50, 100, 25};
    	warrior.attack();
    	mage.attack();
    	return 0;
    }
    Warrior attack!
    Mage attack!

     

    #2 접근 제어 지시자 _ access specifier

    접근 제어 지시자는 외부에서 클래스의 멤버에 접근할 수 있는 권한을 설정하는 문법이다.

    종류는 public, private, protected 로 구분되며 이번 포스팅 에서는 public과 private에 대해서만 다룬다.

    접근 제어 지시자를 public 으로 설정하면 외부에서 자유롭게 접근할 수 있으며 private 로 설정하면 외부로 부터의 접근이 차단된다. 접근 제어 지시자를 설정하지 않으면 기본값인 private로 설정된다. 

    public - 외부 어디서든 접근 가능

    private - 클래스 내부에서 정의된 멤버 함수에서만 접근 가능 

     

    일반적으로 클래스의 멤버에 접근 제어 지시자를 설정할 때 멤버변수는 private로, 멤버함수는 public으로 설정한다.

    이는 객체지향의 중요한 특성인 은닉성과 관련이 있다. 은닉성(정보은닉)이란 모든 객체지향 언어적 요소를 활용하여 객체에 대한 구체적인 정보를 노출시키지 않도록 하는 기법이다.

     

    class Player {
    private:
    	string m_name;
    	int m_level;
    	int m_hp;
    	int m_mp;
    	int m_atk;
    public:
    	void attack()
    	{
    		cout << m_name << " attack!" << endl;
    	}
    };

    다음 포스팅에서는 위와 같이 private로 설정한 멤버에 접근하는 방법에 대해서 정리 하고자 한다.

     

    .. 이어지는 포스팅

    반응형

    댓글

    Designed by JB FACTORY