-
C++ 객체 지향 프로그래밍 (OOP) 시작하기c++ 2025. 2. 1. 16:23728x90
C++는 **객체 지향 프로그래밍(Object-Oriented Programming, OOP)**의 강력한 기능을 제공하는 언어입니다. 객체 지향 프로그래밍은 코드를 더 효율적이고 유지보수하기 쉽게 만들어 주는 프로그래밍 패러다임으로, 클래스와 객체를 기반으로 합니다.
이번 글에서는 C++에서 객체 지향 프로그래밍의 기초 개념을 소개하고, 클래스와 객체의 개념, 그리고 이를 어떻게 사용하는지에 대해 알아보겠습니다.
1. 객체 지향 프로그래밍(OOP)란?
객체 지향 프로그래밍은 **현실 세계의 사물(객체)**을 프로그래밍으로 모델링하는 방법입니다.
OOP의 4대 원칙:
- 캡슐화(Encapsulation): 데이터를 보호하고 숨기는 것. 객체의 내부 구현을 외부에 노출하지 않습니다.
- 상속(Inheritance): 기존 클래스를 기반으로 새로운 클래스를 만드는 것.
- 다형성(Polymorphism): 같은 인터페이스로 다양한 형태의 동작을 구현하는 것.
- 추상화(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) 접근 지정자의 종류
- public: 어디서나 접근 가능
- private: 클래스 내부에서만 접근 가능 (외부에서는 접근 불가)
- 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'c++' 카테고리의 다른 글
C++ 네트워크 프로그래밍과 소켓 통신 (0) 2025.02.04 C++ 멀티스레딩 프로그래밍과 동기화 기법 (0) 2025.02.03 C++ 표준 템플릿 라이브러리(STL)와 스마트 포인터 (0) 2025.02.03 C++ 객체 지향 프로그래밍: 연산자 오버로딩과 템플릿 (0) 2025.02.02 C++ 객체 지향 프로그래밍: 상속과 다형성 (0) 2025.02.01