학습
C++ 기본적인 클래스 개념
C++ 기본적인 클래스 개념 — 초급
기본적인 클래스 개념
1. 도입 (왜 배워야 하는가)
C++에서 클래스는 객체 지향 프로그래밍(OOP)의 핵심 요소입니다. 클래스는 프로그램을 더 구조적이고 관리하기 쉽게 만들어 주며, 코드의 재사용성과 유지보수성을 높여주는 중요한 도구입니다. 실무에서는 복잡한 시스템을 관리하기 위해 클래스와 객체를 활용하여 소프트웨어를 설계합니다.
만약 클래스 개념을 모른다면, 코드가 점점 복잡해져 가면서 프로그램의 구조를 이해하기 어려워지고, 유지보수가 힘들어질 수 있습니다. 결국, 팀원들과의 협업이 어려워지고, 버그가 발생하기 쉬운 코드가 될 것입니다.
2. 핵심 개념 설명
클래스와 객체
- 클래스: 객체를 생성하기 위한 설계도 또는 청사진입니다. 예를 들어, '자동차'라는 클래스를 만들면, 이 클래스를 기반으로 여러 자동차 객체를 만들 수 있습니다.
- 객체: 클래스의 인스턴스(구체화된 사례)입니다. 자동차 클래스에서 '내 차', '네 차'와 같은 개별 자동차가 객체가 됩니다.
- 속성(Properties): 클래스가 가지고 있는 데이터입니다. 자동차 클래스의 경우 '색상', '모델', '제조사' 등이 속성이 될 수 있습니다.
- 메서드(Methods): 클래스가 수행할 수 있는 동작입니다. 자동차 클래스의 메서드로는 '주행하기', '정지하기'가 있을 수 있습니다.
속성과 메서드
| 용어 | 정의 |
|---|---|
| 클래스 | 객체를 생성하기 위한 설계도 |
| 객체 | 클래스의 인스턴스 |
| 속성 | 클래스가 가진 데이터 |
| 메서드 | 클래스가 수행할 수 있는 동작 |
3. 기본 코드 예제
아래는 기본적인 자동차 클래스를 정의하는 코드입니다.
#include <iostream>
#include <string>
class Car {
public:
// 속성
std::string color;
std::string model;
// 메서드
void drive() {
std::cout << "자동차가 주행합니다." << std::endl;
}
};
int main() {
Car myCar; // Car 클래스의 객체 myCar 생성
myCar.color = "빨간색"; // 속성 color에 값 할당
myCar.model = "소나타"; // 속성 model에 값 할당
std::cout << "내 차의 색상: " << myCar.color << std::endl; // 색상 출력
std::cout << "내 차의 모델: " << myCar.model << std::endl; // 모델 출력
myCar.drive(); // 메서드 호출
return 0;
}
실행 결과
내 차의 색상: 빨간색
내 차의 모델: 소나타
자동차가 주행합니다.
코드 한 줄씩 동작 설명
#include <iostream>: 입출력 스트림을 사용하기 위한 라이브러리 포함.#include <string>: 문자열을 사용하기 위한 라이브러리 포함.class Car {...};: Car라는 클래스를 정의.public:: 접근 지정자, 이후의 속성과 메서드는 외부에서 접근 가능.std::string color;: 자동차의 색상을 나타내는 속성 선언.std::string model;: 자동차 모델을 나타내는 속성 선언.void drive() {...}: 자동차가 주행하는 메서드 정의.int main() {...}: 프로그램의 시작점.Car myCar;: Car 클래스의 인스턴스 myCar 생성.myCar.color = "빨간색";: myCar 객체의 색상 속성에 값 할당.myCar.model = "소나타";: myCar 객체의 모델 속성에 값 할당.std::cout << "내 차의 색상: " << myCar.color << std::endl;: myCar의 색상 출력.std::cout << "내 차의 모델: " << myCar.model << std::endl;: myCar의 모델 출력.myCar.drive();: myCar의 주행 메서드 호출.- 잘못된 코드
- 올바른 코드
- 잘못된 코드
- 올바른 코드
- 클래스는 객체 지향 프로그래밍의 기본 구성 요소입니다.
- 객체는 클래스의 인스턴스입니다.
- 속성과 메서드를 통해 데이터를 관리하고 동작을 정의합니다.
- 실무에서는 클래스를 통해 복잡한 시스템을 구조적으로 관리할 수 있습니다.
- 다음에 학습하면 좋은 주제: 상속, 다형성, 템플릿.
4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 구현
쇼핑몰에서 장바구니를 구현할 때, Cart 클래스를 정의하고 여러 개의 Item 클래스를 사용하여 장바구니에 물건을 추가할 수 있습니다.
#include <iostream>
#include <vector>
#include <string>
class Item {
public:
std::string name;
double price;
};
class Cart {
public:
std::vector<Item> items;
void addItem(const Item& item) {
items.push_back(item); // 아이템 추가
}
void displayItems() {
for (const auto& item : items) {
std::cout << "아이템: " << item.name << ", 가격: " << item.price << "원" << std::endl;
}
}
};
int main() {
Cart myCart; // Cart 객체 생성
Item item1 = {"사과", 1000}; // Item 객체 생성
Item item2 = {"바나나", 800}; // Item 객체 생성
myCart.addItem(item1); // 장바구니에 사과 추가
myCart.addItem(item2); // 장바구니에 바나나 추가
myCart.displayItems(); // 장바구니 아이템 출력
return 0;
}
예제 2: 학생 관리 시스템
학생 정보를 관리하기 위해 Student 클래스를 정의할 수 있습니다.
#include <iostream>
#include <string>
class Student {
public:
std::string name;
int age;
void displayInfo() {
std::cout << "이름: " << name << ", 나이: " << age << "세" << std::endl;
}
};
int main() {
Student student1; // Student 객체 생성
student1.name = "홍길동"; // 이름 설정
student1.age = 20; // 나이 설정
student1.displayInfo(); // 학생 정보 출력
return 0;
}
5. 흔한 실수와 주의사항
실수 1: 접근 지정자 실수
class Car {
std::string color; // private 속성
public:
void setColor(std::string c) {
color = c; // 색상 설정 메서드
}
};
class Car {
public:
std::string color; // public 속성
};
주의사항: 속성을 private로 설정하면 외부에서 직접 접근할 수 없으므로, 메서드를 통해 값을 설정해야 합니다.
실수 2: 객체의 복사
Car car1;
car1.color = "파란색";
Car car2 = car1; // 얕은 복사 발생
car2.color = "빨간색"; // car1에 영향을 줄 수 있음
Car car1;
car1.color = "파란색";
Car car2 = car1; // 깊은 복사로 구현
주의사항: 객체의 복사를 할 때, 얕은 복사와 깊은 복사를 이해해야 합니다.