ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ 객체 지향 프로그래밍 (OOP) 시작하기
    c++ 2025. 2. 1. 16:23
    728x90

    C++는 **객체 지향 프로그래밍(Object-Oriented Programming, OOP)**의 강력한 기능을 제공하는 언어입니다. 객체 지향 프로그래밍은 코드를 더 효율적이고 유지보수하기 쉽게 만들어 주는 프로그래밍 패러다임으로, 클래스객체를 기반으로 합니다.

    이번 글에서는 C++에서 객체 지향 프로그래밍의 기초 개념을 소개하고, 클래스객체의 개념, 그리고 이를 어떻게 사용하는지에 대해 알아보겠습니다.


    1. 객체 지향 프로그래밍(OOP)란?

    객체 지향 프로그래밍은 **현실 세계의 사물(객체)**을 프로그래밍으로 모델링하는 방법입니다.

    OOP의 4대 원칙:

    1. 캡슐화(Encapsulation): 데이터를 보호하고 숨기는 것. 객체의 내부 구현을 외부에 노출하지 않습니다.
    2. 상속(Inheritance): 기존 클래스를 기반으로 새로운 클래스를 만드는 것.
    3. 다형성(Polymorphism): 같은 인터페이스로 다양한 형태의 동작을 구현하는 것.
    4. 추상화(Abstraction): 불필요한 정보를 숨기고 필요한 정보만 보여주는 것.

    C++는 이 모든 개념을 지원하는 강력한 객체 지향 언어입니다.


    2. 클래스와 객체

    (1) 클래스란?

    클래스는 **데이터(속성)**와 **함수(메서드)**를 하나로 묶은 사용자 정의 데이터 타입입니다.

    (2) 객체란?

    객체는 클래스로부터 생성된 실제 인스턴스입니다. 클래스는 설계도, 객체는 그 설계도로 만든 제품이라고 할 수 있습니다.


    3. 클래스 작성하기

    (1) 기본 클래스 구조

    #include <iostream>
    using namespace std;
    
    // 클래스 정의
    class Car {
    public:
        // 속성 (멤버 변수)
        string brand;
        string model;
        int year;
    
        // 메서드 (멤버 함수)
        void displayInfo() {
            cout << "브랜드: " << brand << endl;
            cout << "모델: " << model << endl;
            cout << "연식: " << year << endl;
        }
    };
    
    int main() {
        // 객체 생성
        Car myCar;
        myCar.brand = "Hyundai";
        myCar.model = "Sonata";
        myCar.year = 2022;
    
        // 메서드 호출
        myCar.displayInfo();
    
        return 0;
    }

    (2) 출력 결과:

    브랜드: Hyundai
    모델: Sonata
    연식: 2022

    4. 생성자와 소멸자

    (1) 생성자(Constructor)

    • 생성자는 객체가 생성될 때 자동으로 호출되는 특별한 함수입니다.
    • 객체의 초기화를 담당합니다.
    class Car {
    public:
        string brand;
        string model;
        int year;
    
        // 생성자 정의
        Car(string b, string m, int y) {
            brand = b;
            model = m;
            year = y;
        }
    
        void displayInfo() {
            cout << "브랜드: " << brand << ", 모델: " << model << ", 연식: " << year << endl;
        }
    };
    
    int main() {
        Car myCar("Kia", "K5", 2021);
        myCar.displayInfo();
        return 0;
    }

    (2) 소멸자(Destructor)

    • 소멸자는 객체가 소멸될 때 자동으로 호출되는 함수입니다.
    • 주로 메모리 해제리소스 반환을 담당합니다.
    class Car {
    public:
        string brand;
    
        // 생성자
        Car(string b) {
            brand = b;
            cout << brand << " 자동차가 생성되었습니다." << endl;
        }
    
        // 소멸자
        ~Car() {
            cout << brand << " 자동차가 소멸되었습니다." << endl;
        }
    };
    
    int main() {
        Car myCar("Genesis");
        return 0;
    }

    (3) 출력 결과:

    Genesis 자동차가 생성되었습니다.
    Genesis 자동차가 소멸되었습니다.

    5. 접근 지정자 (Access Specifiers)

    (1) 접근 지정자의 종류

    1. public: 어디서나 접근 가능
    2. private: 클래스 내부에서만 접근 가능 (외부에서는 접근 불가)
    3. protected: 클래스 내부와 상속받은 클래스에서만 접근 가능

    (2) 예제: 캡슐화 활용하기

    class Account {
    private:
        int balance;  // private으로 외부 접근 금지
    
    public:
        // 생성자
        Account(int initial_balance) {
            balance = initial_balance;
        }
    
        // balance에 접근하기 위한 메서드 (Getter)
        int getBalance() {
            return balance;
        }
    
        // balance를 수정하기 위한 메서드 (Setter)
        void deposit(int amount) {
            if (amount > 0) balance += amount;
        }
    };
    
    int main() {
        Account myAccount(1000);
        myAccount.deposit(500);
        cout << "잔액: " << myAccount.getBalance() << endl;  // 잔액: 1500
        return 0;
    }
    728x90
Designed by Tistory.