C++/입문편

[입문편] 10강. Class 기본 구조&예시 및 Struct 구문과의 차이점을 알아보자

쉽코딩 2023. 1. 22.

 

강의에 들어가기 앞서

C++의 핵심은 객체지향의 도입입니다. 그래서 본 강의의 구성을 아래와 같이 구성했습니다.

 

C++ 입문편 → 객체지향 초급편 → 객체지향 중급편 → 객체지향 고급편

 

그렇기 때문에 입문 편에서는 Class 파트의 가장 기본적인 구조에 대해서만 다룰 예정이며,

 

"객체지향 초급편 → 객체지향 중급 편→ 객체지향 고급 편"에서 보다 자세하게 강의를 다룰 것입니다.

 

그렇기 때문에 본 강의에서는 단순히 Class란 이런 것이다 정도의 느낌만 알고 넘어가면 충분합니다.

 


 

 

 

Class

 

 

 

Class의 기본 구조 및 예시

C++에서 클래스는 데이터 멤버(특성 또는 속성이라고도 함) 및 멤버 함수(메서드 또는 동작이라고도 함)를 단일 엔터티 내에서 캡슐화하는 사용자 정의 데이터 형식입니다. 클래스는 키워드 "class"와 클래스 이름을 사용하여 정의됩니다. 클래스 정의는 여는 중괄호 '{'로 시작하고 닫는 중괄호 '}'로 끝납니다.

 

다음은 C++ 클래스의 기본 예입니다.

class Example {
    public:
        int x;
        int y;
        void setValues(int a, int b);
        int addValues();
};

"Example"은 클래스 이름이고 "x"와 "y"는 데이터 멤버이며 "setValues"와 "addValues"는 멤버 함수입니다.
"public:" 키워드는 클래스 멤버의 액세스 가능성을 결정하는 액세스 지정자입니다.

 

C++ 에는 public, protected 및 private의 세 가지 유형의 액세스 지정자가 있습니다.

 

public으로 선언된 멤버는 어디서나 액세스 할 수 있는 반면, protected로 선언된 멤버는 클래스 및 해당 파생 클래스 내에서만 액세스할 수 있고 private로 선언된 멤버는 클래스 내에서만 액세스할 수 있습니다. 

 

void Example::setValues(int a, int b) {
    x = a;
    y = b;
}

int Example::addValues() {
    return x + y;
}

여기서 함수 정의는 클래스 외부에서 구현되지만 여전히 클래스 범위 내에 있습니다. 'inline' 키워드를 사용하여 클래스 내부에 함수를 구현하는 것도 가능합니다.

 

class Example {
    public:
        int x;
        int y;
        inline void setValues(int a, int b) {
            x = a;
            y = b;
        }
        inline int addValues() {
            return x + y;
        }
};

이것은 C++ 클래스의 기본 구조이지만 사용 사례와 요구 사항에 따라 더 많은 기능과 복잡성을 가질 수 있습니다.

 

 

Class에서 사용되는 public, private, protect 기능 설명 및 예시

C++에서 액세스 지정자 public, private 및 protected는 데이터 멤버 및 멤버 함수와 같은 클래스 멤버의 액세스 가능성을 결정하는 데 사용됩니다.

공용 멤버는 클래스(public) 내부 및 외부 어디에서나 액세스할 수 있습니다. 이러한 멤버는 클래스의 모든 개체뿐만 아니라 개체에 액세스할 수 있는 모든 함수나 클래스에서 액세스할 수 있습니다.

개인 멤버는 클래스(private) 내에서만 액세스 할 수 있습니다. 이러한 멤버는 파생 클래스를 포함하여 클래스 외부의 코드에서 액세스할 수 없습니다. 이는 클래스가 해당 데이터에 액세스 하고 수정하는 방법을 제어할 수 있으므로 캡슐화에 유용합니다.

보호된 멤버는 클래스(protect) 및 해당 파생 클래스 내에서만 액세스할 수 있습니다. 이러한 멤버는 클래스 또는 해당 파생 클래스 외부의 코드에서 액세스할 수 없습니다.

다음은 클래스에서 액세스 지정자를 사용하는 방법의 예입니다.

class Example {
    private:
        int x;
    protected:
        int y;
    public:
        void setValues(int a, int b);
        int addValues();
};

이 예에서 데이터 멤버 "x"는 비공개로 선언되며 이는 "Example" 클래스 내에서만 액세스할 수 있음을 의미합니다. 데이터 멤버 "y"는 보호된 것으로 선언됩니다. 즉, "Example" 클래스 및 "Example"에서 파생된 모든 클래스 내에서 액세스할 수 있습니다. 멤버 함수 "setValues" 및 "addValues"는 공용으로 선언되어 어디에서나 액세스할 수 있습니다.

액세스 지정자를 사용하면 클래스 멤버의 가시성 및 액세스 가능성을 제어하여 클래스의 데이터 및 동작을 보다 쉽게 관리할 수 있습니다. 또한 의도하지 않은 데이터 조작을 방지하고 일부 데이터를 비공개로 유지하여 클래스의 무결성을 유지하는 데 도움이 됩니다.

 

 

Class에서 사용되는 상속의 개념 설명 및 예시

C++에서 상속은 한 클래스(파생 클래스)가 다른 클래스(기본 클래스)의 속성과 메서드를 상속할 수 있도록 하는 메커니즘입니다. 이를 통해 코드 재사용이 가능하고 기존 클래스의 수정된 버전인 새 클래스를 생성할 수 있습니다.

기본 클래스는 부모 클래스 또는 슈퍼 클래스라고도 하며 파생 클래스는 자식 클래스 또는 하위 클래스라고도 합니다. 파생 클래스는 기본 클래스의 모든 비공개 멤버를 상속하며 새 멤버를 추가하거나 기존 멤버를 재정의할 수도 있습니다.

다음은 C++에서 상속을 사용하는 방법의 예입니다.

class Shape {
    protected:
        int width, height;
    public:
        void setWidth(int w) {
            width = w;
        }
        void setHeight(int h) {
            height = h;
        }
};

class Rectangle: public Shape {
    public:
        int getArea() {
            return width * height;
        }
};

이 예제에서 "Shape" 클래스는 기본 클래스이고 "Rectangle" 클래스는 파생 클래스입니다. 

"Rectangle" 클래스는 "Shape" 클래스의 "width" 및 "height" 멤버와 "setWidth" 및 "setHeight" 멤버 함수를 상속합니다. 

"Rectangle" 클래스는 또한 상속된 멤버 "width" 및 "height"를 사용하여 사각형의 면적을 계산하는 새 멤버 함수 "getArea"를 추가합니다.

상속을 사용하면 파생 클래스가 다른 파생 클래스에서 상속할 수 있는 클래스의 계층 구조를 만들 수 있습니다. 또한 하나의 클래스가 여러 클래스로부터 상속받을 수 있는데 이를 다중 상속이라고 합니다.

C++에서는 액세스 지정자도 상속됩니다. 즉, 멤버가 기본 클래스에서 비공개이면 파생 클래스에서도 비공개가 됩니다. 멤버가 기본 클래스에서 보호되는 경우 파생 클래스에서 보호됩니다.

상속은 기존 코드를 재사용하고 보다 전문적인 클래스를 생성할 수 있는 강력한 기능입니다. 또한 파생 클래스가 기본 클래스의 특정 버전인 클래스 간의 "is-a" 관계 개념을 촉진합니다.

 

 

클래스(Class)와 구조체(Struct)의 차이점 → Class만 기억하자

C++에서 클래스와 구조체는 모두 사용자 정의 데이터 유형을 정의하는 데 사용되지만 둘 사이에는 몇 가지 중요한 차이점이 있습니다.

클래스와 구조체의 주요 차이점은 기본 액세스 수준입니다. 클래스에서 기본 액세스 수준은 비공개이고 구조체에서는 기본 액세스 수준이 공개입니다. 즉, 기본적으로 클래스의 멤버는 클래스 내에서만 액세스할 수 있지만 구조체의 멤버는 어디에서나 액세스할 수 있습니다.

이러한 차이로 인해 클래스는 종종 데이터를 캡슐화하고 데이터에 대한 제어된 액세스를 제공하는 데 사용되는 반면 구조체는 자유롭게 액세스하고 수정할 수 있는 간단한 데이터 구조를 나타내는 데 자주 사용됩니다.

클래스와 구조체의 또 다른 차이점은 멤버 함수의 사용입니다. 클래스에는 종종 기능과 동작을 제공하는 멤버 함수가 있는 반면 구조체에는 멤버 함수가 적고 데이터 멤버에 더 많이 의존하는 경향이 있습니다.

다음은 C++에서 클래스와 구조체를 사용하는 방법의 예입니다.

class ExampleClass {
    private:
        int x;
    public:
        void setX(int value) {
            x = value;
        }
        int getX() {
            return x;
        }
};

struct ExampleStruct {
    int x;
};

이 예에서 클래스 "ExampleClass"에는 데이터 멤버에 대한 액세스를 제어하기 위한 전용 데이터 멤버 "x"와 공용 멤버 함수 "setX" 및 "getX"가 있습니다. 구조체 "ExampleStruct"에는 직접 액세스하고 수정할 수 있는 공용 데이터 멤버 "x"가 있습니다.

결론적으로 C++의 클래스와 구조체는 모두 사용자 정의 데이터 유형을 정의할 수 있지만 기본 액세스 수준이 다르고 사용 방식이 다릅니다. 클래스는 일반적으로 캡슐화 및 데이터에 대한 제어된 액세스를 제공하는 데 사용되는 반면 구조체는 일반적으로 자유롭게 액세스하고 수정할 수 있는 간단한 데이터 구조에 사용됩니다.

 

 

이것으로 C++입문편의 총 10개의 강의가 마무리되었습니다. 여기까지의 공부를 통해 여러분은 이제 C++의 기초문법을 읽힌 것입니다. 이는 절대 C++를 바탕으로 한 코딩을 할 수 있다는 의미가 아닙니다. 단지, 약간의 해석을 할 수 있다는 의미입니다. 

 

 

 

 

***************************************************************************************************

이제 시작입니다. 영어 단어를 외웠다고 해서 영작을 할 수 있는 것이 아닌 것처럼, 기본 문법을 배웠다고 해서 코딩을 할 수 수는 없습니다.

 

그러니 객체지향 초급 편, 중급 편, 고급 편을 통해 앞으로 더 열심히 트레이닝해야 됩니다. 그리고 프로젝트를 진행해야

어느 정도 코딩을 할 수 있다? 요정도의 느낌을 받을 수 있을 것입니다.

 

그럼 개발자의 길로 들어오기 위한 기초 관문을 통과하신 것을 축하드리며 앞으로 파이팅입니다.

 

 

감사합니다. 

***************************************************************************************************

댓글