산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

클래스란?

C++ 클래스는 해당 데이터를 조작하는 데이터와 함수들을 단일 엔티티로 묶는 사용자 정의 데이터 타입입니다. 이를 청사진(blueprint)이라고 생각하면 됩니다: 클래스로부터 생성될 객체들의 형태와 행동을 정의합니다.

집 청사진이 문, 창문, 방 배치를 지정하듯, 클래스는 데이터 멤버들의 배치와 그들을 조작할 연산들을 기술합니다. 같은 청사진으로부터 여러 집(객체)들을 지을 수 있습니다.

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

위 그림에서 단일 프로토타입이 서로 다른 특징을 가진 두 개의 개별 집을 생성합니다.

이 튜토리얼에서 배울 내용:

클래스 선언

클래스 선언은 간단합니다: class 키워드 뒤에 클래스 이름을 쓰고 본문을 중괄호로 감쌉니다.

문법

class className {
    // 데이터 멤버
    // 멤버 함수
}; 

접근 지정자: private vs public

접근 지정자는 클래스 멤버의 가시성을 제어합니다.

객체 생성 (인스턴스화)

객체는 클래스의 인스턴스입니다. 객체 선언은 변수 선언과 같은 패턴을 따릅니다: className objectName;

문법

className objectName; 

인스턴스화는 객체 메모리를 할당하고 생성자를 트리거할 수 있습니다.

데이터 멤버 접근

public 데이터 멤버는 점(.) 연산자로 접근합니다.

예제

#include <iostream>
using namespace std;
class Phone {
public:
    double cost;
    int slots;
};
int main() {
    Phone Y6;
    Phone Y7;
    Y6.cost = 100.0;
    Y6.slots = 2;
    Y7.cost = 200.0;
    Y7.slots = 2;
    cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
    cout << "Cost of Huawei Y7 : " << Y7.cost << endl;
    cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
    cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;
    return 0;
} 

출력:

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

왜 Getter/Setter를 사용하는가?

데이터에 직접 접근하거나 수정하면 캡슐화가 깨질 수 있습니다. getter와 setter 멤버 함수를 사용하면 제어된 접근이 가능합니다.

캡슐화 예제

#include <iostream>
using namespace std;
class ClassA {
public:
    void setA(int val);
    int getA() const;
private:
    int a;
};
int ClassA::getA() const {
    return a;
}
void ClassA::setA(int val) {
    a = val;
}
int main() {
    ClassA obj;
    obj.setA(20);
    cout << "Value of a is: " << obj.getA();
    return 0;
} 

출력:

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

Protected 멤버와 상속

Protected 멤버는 클래스 내부와 파생 클래스에서 접근 가능하여 제어된 상속을 가능하게 합니다.

예제

#include <iostream>
using namespace std;
class ParentClass {
protected:
    int value;
};
class ChildClass : public ParentClass {
public:
    void setId(int x) {
        value = x;
    }
    void displayValue() {
        cout << "Value is: " << value << endl;
    }
};
int main() {
    ChildClass c;
    c.setId(21);
    c.displayValue();
    return 0;
} 

출력:

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

클래스 내부 vs 외부 멤버 함수

멤버 함수는 클래스 내부에서 인라인으로 정의하거나 내부에서 선언하고 범위 해결 연산자 ::로 나중에 정의할 수 있습니다.

예제

#include <iostream>
#include <string>
using namespace std;
class Guru99 {
public:
    string tutorial_name;
    int id;
    void printName();
    void printId() {
        cout << "Tutorial id is: " << id;
    }
};
void Guru99::printName() {
    cout << "Tutorial name is: " << tutorial_name;
}
int main() {
    Guru99 guru;
    guru.tutorial_name = "C++";
    guru.id = 1001;
    guru.printName();
    cout << endl;
    guru.printId();
    return 0;
} 

출력:

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

생성자와 소멸자

생성자는 객체 생성 시 초기화하고, 소멸자는 객체 파괴 직전에 정리합니다.

예제

#include <iostream>
using namespace std;
class ClassA {
public:
    ClassA() {
        cout << "Class constructor called" << endl;
    }
    ~ClassA() {
        cout << "Class destructor called" << endl;
    }
};
int main() {
    ClassA a; // 생성자 호출
    int p = 1;
    if (p) {
        ClassA b; // 생성자 호출, 블록 끝에서 소멸자 호출
    } // 'a' 소멸자 여기 호출
    return 0;
} 

출력:

C++ 클래스와 객체: 캡슐화, 생성자/소멸자, 접근 제어 실전 가이드

핵심 요약

C 언어

  1. C# 클래스와 객체: 견고한 OOP를 위한 기초 다지기
  2. C++ 클래스와 객체: 객체지향 프로그래밍 실전 가이드
  3. C++ 프렌드 함수와 프렌드 클래스: 접근 제어 마스터하기
  4. C++ 클래스 템플릿 마스터: 실전 가이드
  5. C++ 연산자 총정리: 종류, 예제, 샘플 프로그램
  6. C++ switch-case 마스터하기: 문법, 활용법, 실전 예제
  7. C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제
  8. C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달
  9. C++ std::list 마스터하기: 문법, 함수, 실전 예제
  10. C++ 구조체 vs 클래스: 핵심 차이, 문법, 최적 사용 사례