C++ 은 객체지향 프로그램으로 클래스를 사용해서 프로그래밍을 한다.

 

객체지향프로그래밍의 대표인 자바와 닮은 점도 있고 다른 점도 있다.

 

자바와 C++ 어떤 것을 먼저 접했느냐에 따라서 C++의 클래스를 대하는 방식에 차이가 있을 수 있는데, 필자는 꽤 오래전에 자바를 먼저 시작했기 때문에 C++의 class 문법이 낯설었던 경험이 있다.

 

예를 들어 자바에서 인스턴스는 지역변수로 선언할 수 없는데 C++에서는 가능하다. 자바의 프로그램은 클래스 단위로 실행되는데 모든 객체는 Object 클래스로 부터 상속을 받고 시작하니 모든 프로세스가 말 그대로 객체를 지향한다. static 메서드를 사용할 수 있긴 하지만 클래스 자체를 동적 메모리에 할당하지 않고 사용할 수가 없다.

 

반면 C++의 클래스는 C언어의 구조체와 구조체를 사용하는 함수를 묶어놓은 것 같다. 원래 구조체가 동적 할당이 없어도 사용가능했던 것 처럼 바로 지역변수에서 사용이 가능하고 심지어 전역변수에서 생성자가 호출된다.

 

클래스는 개념이 어렵기 때문에 전문 강좌를 듣는 편이 좋다고 생각한다. 객체지향의 개념 자체는 자바나 C++ 이나 유사하니까 어느 쪽을 들어둬도 상관은 없다. 유튜브에는 자바의 정석 남궁성 님이나 생활코딩이라던지 퀄리티가 좋은 무료 강좌가 많으니까 충분히 활용을 할 수 있을 것이다.

 

아니면 대학 공개 강의 사이트를 이용해도 좋다. 좀 시간이 지난 강의가 올라오지만 C++의 클래스 강의는 변할게 없다.

 

대학 공개 강의 사이트 이용하기 KOCW | 무료 대학교 프로그래밍 강의 추천 (tistory.com)

 

대학 공개 강의 사이트 이용하기 KOCW | 무료 대학교 프로그래밍 강의 추천

KOCW 링크 http://www.kocw.net/home/index.do www.kocw.net Korea OpenCourseWare 줄여서 KOCW  고등교육 교수학습자료 공동활용 체제의 약자라고 한다. 국내에서는 가장 많은 이러닝 강의를 무료공개하고 있다..

digiconfactory.tistory.com


그럼 C++의 클래스를 작성해보자.

 

파일을 하나로 작성하려면 main 함수 위에다가 작성해야 하는데 웬만하면 헤더파일에 분리해서 작업하는게 좋다.

 

#include<iostream>

class Cat
{
    public:
        unsigned int Age;
        unsigned int Weight;

        void Play();
};

void Cat::Play(){
    std::cout << "MEOW~\n";
}

 

새로운 문법을 보면 막막할 수 있는데 하나씩 뜯어보면 어려울게 없다.

 

클래스를 선언하는 키워드는 class 이다. public: 아래에 있는 것은 외부에서 이 클래스 안의 정보에 접근이 가능하다는 표시다. 이를 접근제어자라고 한다.

 

{ } 중괄호가 없어도 이 아래 있는 것들은 public의 속성을 갖는다. { } 코드블록 처럼 하나의 블록안에 들어가 있는 것이다. public 과 반대 속성을 가진 private 이 있기 때문에 서로 구분이 된다.

 

void Play(); 는 함수처럼 생겼다. 맞다. 클래스의 함수를 메소드라고 한다. 이 클래스의 인스턴스만 사용할 수 있기 때문에 메소드라고 한다. 메소드를 클래스 안에 선언만 하고 바깥에서 저렇게 Cat::Play 라는 방식으로 정의할 수가 있다. Cat 은 클래스이고 Play 는 Cat의 메소드이다.

 

클래스의 개념을 설명하면 매우 길어지고 장황해지지만 문법을 보면 구체적으로 알 수 있다.

 

누가봐도 Cat 고양이를 하나의 데이터로 정의한 모습이다. 고양이의 나이와 몸무게를 넣었고 Play 라는 메소드는 그 고양이가 하는 행동(기능)을 넣은 것이다.

 

C언어라면

 

typedef struct myCat {

    unsigned int Age;

    unsinged int Weight;

} Cat;

 

void CatPlay();

 

이렇게 되어 있었을 것이다. 이 둘을 하나로 묶은 것이 클래스이다.

 

다음은 메인 함수에서 실행시켜본다.

 

* 예제 코드

#include "Cat.h"

using namespace std;

#define Line cout << "\n-------------------------------" << endl;

int main(int argc, char const *argv[])
{
    
    Cat Nyang2;

    Line;

    Nyang2.Age = 5;
    Nyang2.Weight = 7;

    cout << "Age : " << Nyang2.Age << endl;
    cout << "Weight : " << Nyang2.Weight << endl;
    Nyang2.Play();

    return 0;
}

Cat 은 class이다. 클래스는 사용자 정의 타입(type)이다. C의 구조체에서 사용했던 것 처럼 프로그래머가 정의해서 사용한다.

 

. 도트 연산자를 사용해서 클래스의 변수와 함수에 접근할 수 있다. main 함수는 Cat 클래스에게 외부이다. public을 사용하면 외부에서 Cat에게 접근이 가능하다는 것이다.

 

클래스 안에 들어있는 변수를 멤버 변수, 함수를 메소드라고 부른다. 데이터와 동작코드 이 두 개로 클래스는 생성된다. 정말 간단하지만 이게 또 나중에 가면 다형성이라던가 추상 클래스라던가 많이 복잡해진다.

 

이 문서에서는 클래스의 선언에 대하여 알아봤다.

공유하기

facebook twitter kakaoTalk kakaostory naver band