반응형

출처 :   https://www.yes24.com/Product/Goods/9328793

객체에 대한 이해

C++에서 객체는 객체지향 프로그래밍(OOP)의 핵심 개념 중 하나입니다. 객체는 데이터와 데이터를 조작하는 메서드(함수)를 함께 묶어서 캡슐화하고, 이러한 객체를 통해 프로그램을 구성하는 방식입니다. 객체는 클래스(Class)를 통해 정의되며, 다음은 C++ 객체에 대한 주요 개념과 이해를 돕기 위한 예제입니다.

1. 클래스(Class):
   - 클래스는 객체를 만들기 위한 템플릿 또는 설계도 역할을 합니다. 클래스는 객체의 구조와 행동을 정의합니다.
   - 클래스는 데이터 멤버(속성)와 멤버 함수(메서드)를 포함합니다.

예를 들어, 아래는 간단한 클래스 `Person`을 정의하는 방법입니다:

class Person {
public:
    // 데이터 멤버
    std::string name;
    int age;

    // 멤버 함수
    void introduce() {
        std::cout << "제 이름은 " << name << "이고, 나이는 " << age << "세입니다." << std::endl;
    }
};



2. 객체(Objects):
   - 클래스를 기반으로 생성된 실제 인스턴스를 객체라고 합니다. 객체는 클래스의 멤버에 접근하고 클래스에서 정의된 메서드를 호출할 수 있습니다.
   - 객체는 클래스의 멤버 변수를 가지며, 이 변수들은 해당 객체의 상태를 나타냅니다.

int main() {
    // Person 클래스의 객체 생성
    Person person1;

    // 객체의 데이터 멤버 설정
    person1.name = "Alice";
    person1.age = 30;

    // 객체의 메서드 호출
    person1.introduce();

    return 0;
}



위 코드에서 `person1`은 `Person` 클래스의 객체입니다. 이 객체는 이름과 나이를 저장하고, `introduce` 메서드를 호출하여 정보를 출력합니다.

3. 캡슐화(Encapsulation):
   - 객체는 데이터와 그 데이터를 조작하는 메서드를 하나로 묶어 캡슐화된 단위로 다루어지므로, 데이터와 코드를 더욱 구조화하고 보호할 수 있습니다. 접근 제어 지시어(예: `public`, `private`, `protected`)를 사용하여 멤버의 접근을 제어합니다.

4. 상속(Inheritance):
   - C++에서 클래스는 다른 클래스에서 파생될 수 있으며, 이것을 상속이라고 합니다. 상속을 통해 부모 클래스의 멤버와 메서드를 자식 클래스에서 재사용하고 확장할 수 있습니다.

5. 다형성(Polymorphism):
   - 다형성은 여러 클래스가 동일한 메서드 이름을 사용하고 있지만 각 클래스에서 메서드를 다르게 구현할 수 있는 능력을 의미합니다. 이를 통해 동일한 메서드 호출을 다른 객체에서 다르게 처리할 수 있습니다.

C++에서 객체는 코드의 재사용성과 모듈화를 촉진하며, 객체지향 프로그래밍의 기본 원칙을 따라 프로그램을 작성할 때 객체를 중심으로 설계하는 것이 일반적입니다.

 

생성자,소멸자,접근지정,인라인 함수


1. 생성자 (Constructor):
   - 생성자는 클래스의 객체가 생성될 때 자동으로 호출되는 특별한 멤버 함수입니다.
   - 생성자는 주로 객체 초기화 작업을 수행하며, 클래스의 멤버 변수를 초기화하거나 다른 초기화 작업을 수행하는 데 사용됩니다.
   - 생성자의 이름은 클래스 이름과 동일하며, 반환 값이 없습니다.

예를 들어:

class MyClass {
public:
    // 생성자
    MyClass() {
        // 초기화 작업 수행
        x = 0;
        y = 0;
    }

private:
    int x;
    int y;
};



2. 소멸자 (Destructor):
   - 소멸자는 객체가 소멸될 때 자동으로 호출되는 특별한 멤버 함수입니다.
   - 주로 메모리 해제나 리소스 정리와 같은 마무리 작업을 수행하기 위해 사용됩니다.
   - 소멸자의 이름은 클래스 이름 앞에 `~` 기호를 붙인 형태입니다.

예를 들어:

class MyClass {
public:
    // 생성자
    MyClass() {
        // 초기화 작업 수행
        x = 0;
        y = 0;
    }

    // 소멸자
    ~MyClass() {
        // 마무리 작업 수행
    }

private:
    int x;
    int y;
};



3. 접근 지정 (Access Specifiers):
   - C++에서는 멤버 변수와 함수의 접근을 제어하기 위해 접근 지정 지시어를 사용합니다.
   - 주요 접근 지정 지시어는 `public`, `private`, `protected` 세 가지입니다.
   - `public`: 해당 멤버는 클래스 외부에서 접근 가능합니다.
   - `private`: 해당 멤버는 클래스 내부에서만 접근 가능합니다.
   - `protected`: 해당 멤버는 클래스 내부와 파생 클래스에서만 접근 가능합니다.

예를 들어:

class MyClass {
public:
    // public 멤버
    int publicVar;

private:
    // private 멤버
    int privateVar;
};



4. 인라인 함수 (Inline Function):
   - 인라인 함수는 함수 호출 오버헤드를 줄이기 위해 사용되는 함수 지정자입니다.
   - 함수가 인라인 함수로 선언되면 컴파일러는 해당 함수의 본문을 호출하는 위치에 직접 삽입합니다.
   - 작은 규모의 함수나 반복 호출되는 함수에 유용합니다.

예를 들어:

class Math {
public:
    // 인라인 함수
    inline int add(int a, int b) {
        return a + b;
    }
};



이렇게 정의된 `add` 함수는 호출 시 함수 본문이 직접 삽입되므로 함수 호출 오버헤드가 없습니다.

이러한 개념들은 C++ 프로그래밍에서 중요하며, 객체의 초기화와 정리, 멤버 변수의 접근 제어, 성능 최적화 등 다양한 측면에서 사용됩니다.

 

C++구조체

C++에서 구조체(Structure)는 데이터를 그룹화하고 새로운 데이터 형식을 정의하는 데 사용되는 중요한 개념입니다. 구조체는 클래스와 유사하지만 몇 가지 중요한 차이점이 있습니다. 아래에서 C++ 구조체에 대해 알려드리겠습니다.

1. 구조체 정의 (Structure Definition):
   - 구조체는 `struct` 키워드를 사용하여 정의됩니다.
   - 구조체 내에는 다양한 데이터 멤버(속성)를 포함할 수 있습니다.

예를 들어:

struct Point {
    int x;
    int y;
};



위 코드는 `Point`라는 구조체를 정의하며, 이 구조체에는 정수형 데이터 멤버 `x`와 `y`가 포함되어 있습니다.

2. 구조체 멤버 접근 (Accessing Structure Members):
   - 구조체의 멤버에 접근할 때는 `.`(도트) 연산자를 사용합니다.

예를 들어, 구조체 `Point`의 멤버에 접근하는 방법은 다음과 같습니다:

Point p;
p.x = 5;
p.y = 10;



3. 구조체 초기화 (Structure Initialization):
   - 구조체를 초기화할 때 중괄호 `{}`를 사용하여 초기값을 설정할 수 있습니다.

예를 들어:

Point p = {3, 7};



4. 구조체를 함수의 매개변수로 전달:
   - 구조체를 함수에 전달할 때는 값 복사가 일어납니다. 따라서 구조체가 크고 복사 비용이 큰 경우에는 참조 또는 포인터를 사용하여 전달하는 것이 효율적일 수 있습니다.

void printPoint(Point p) {
    std::cout << "x: " << p.x << ", y: " << p.y << std::endl;
}



5. 구조체와 클래스의 차이점:
   - 구조체와 클래스의 주요 차이점 중 하나는 멤버 접근 제어입니다. 클래스의 멤버는 기본적으로 `private`로 설정되며, 구조체의 멤버는 기본적으로 `public`으로 설정됩니다. 따라서 클래스는 보다 엄격한 캡슐화를 제공하며 구조체는 데이터 그룹화에 중점을 둡니다.

구조체는 주로 간단한 데이터 구조를 표현하기 위해 사용되며, C++에서 클래스와 구조체는 비슷한 기능을 수행할 수 있습니다. 선택적으로 구조체에 함수를 추가하여 메서드를 정의하거나, 클래스와 마찬가지로 접근 지정을 변경할 수 있습니다.

반응형

+ Recent posts