C++ 클래스와 객체: 초보자 가이드
안녕하세요, 미래의 C++ 마エスト로! 여러분의 이 흥미로운 C++ 클래스와 객체의 세계로의 여정을 안내해 드리게 되어 기쁩니다. 여러년間 프로그래밍을 가르치고 있는 사람으로서, 이 주제는 LEGO 블록으로 만들어가는 것과 같다는 걸 말씀드릴 수 있습니다. 한 번 익숙해지면, 빨리 아름다운 것들을 만들어 낼 수 있을 거예요!
클래스와 객체는 무엇인가요?
진짜 깊이 들어가기 전에, 간단한 비유로 시작해볼게요. 자동차를 설명하는 것을 상상해봅시다. 자동차는 특정한 성격(색상, 모델, 연식)을 가지고 있으며, 특정한 행동(시동, 정지, 가속)을 할 수 있습니다. C++에서는 클래스가 자동차의 블루프린트와 같이, 모든 자동차가 가져야 할 성격과 행동을 정의합니다. 그럼 객체는 그 블루프린트로 만들어진 특정한 자동차입니다.
이제 코드로 손을 더러워보죠!
C++ 클래스 정의
C++에서는 class
키워드를 사용하여 클래스를 정의합니다. 여기 기본적인 구조가 있습니다:
class Car {
// 클래스 멤버들이 여기 들어갑니다
};
하지만 그냥 빈 차고예요! 좀 더 자세한 것을 추가해봅시다:
class Car {
public:
string color;
string model;
int year;
void start() {
cout << "The car is starting!" << endl;
}
void stop() {
cout << "The car is stopping!" << endl;
}
};
이를 분석해봅시다:
-
Car
라는 클래스를 정의했습니다. - 클래스 내에 데이터 멤버(
color
,model
,year
)와 멤버 함수(start()
,stop()
)가 있습니다. -
public
키워드는 이 멤버들이 클래스 외부에서 접근할 수 있음을 의미합니다.
C++ 객체 정의
이제 자동차 블루프린트가 있으니, 실제로 자동차를 몇 대 만들어봅시다! 이곳에서 객체가 등장합니다:
int main() {
Car myCar; // Car 클래스의 객체를 생성합니다
Car yourCar; // 또 다른 Car 클래스의 객체입니다
return 0;
}
성공하셨습니다! 여러분은 그저 "생산한" 두 대의 자동차가 있습니다. 하지만 지금은 매우 픽셀적입니다 – 좀 더 개성을 더해보죠!
데이터 멤버에 접근하기
자동차의 속성값을 설정하거나 가져오기 위해, 점(.) 연산자를 사용합니다:
int main() {
Car myCar;
// 값 설정
myCar.color = "Red";
myCar.model = "Sportster";
myCar.year = 2023;
// 값 가져오기
cout << "My car is a " << myCar.color << " " << myCar.model << " from " << myCar.year << endl;
// 멤버 함수 호출
myCar.start();
myCar.stop();
return 0;
}
출력:
My car is a Red Sportster from 2023
The car is starting!
The car is stopping!
myCar
객체와 상호작용하는 방법을 보았죠? 우리는 그 색상, 모델, 연식을 설정한 후, 해당 값을 인쇄하고 마지막으로 그 멤버 함수를 호출합니다.
클래스와 객체에 대한 자세한 내용
기본 사항을 이해했으니, 좀 더 깊이 들어가보죠. C++에서 클래스는 주로 두 가지 주요 섹션으로 나뉩니다:
- 비공개 멤버: 이들은 클래스 내에서만 접근할 수 있습니다.
- 공개 멤버: 이들은 클래스 외부에서 접근할 수 있습니다.
다음은 우리의 Car
클래스의 개선된 버전입니다:
class Car {
private:
string color;
string model;
int year;
bool isRunning;
public:
// 생성자
Car(string c, string m, int y) {
color = c;
model = m;
year = y;
isRunning = false;
}
// 게터 메서드
string getColor() { return color; }
string getModel() { return model; }
int getYear() { return year; }
// 다른 메서드
void start() {
if (!isRunning) {
isRunning = true;
cout << "The " << color << " " << model << " is starting!" << endl;
} else {
cout << "The car is already running!" << endl;
}
}
void stop() {
if (isRunning) {
isRunning = false;
cout << "The " << color << " " << model << " is stopping!" << endl;
} else {
cout << "The car is already stopped!" << endl;
}
}
};
이 버전은 여러 새로운 개념을 도입합니다:
- 비공개 멤버: 우리는 더 나은 캡슐화를 위해 데이터 멤버를 비공개로 만듭니다.
- 생성자: 이 특수한 함수는 객체가 생성될 때 호출되며, 그 값을 초기화합니다.
- 게터 메서드: 이들은 우리의 비공개 데이터 멤버에 대한 통제된 접근을 허용합니다.
-
개선된 메서드: 우리의
start()
과stop()
메서드는 이제 자동차의 상태를 확인한 후 행동합니다.
이 개선된 클래스를 사용하는 방법을 보죠:
int main() {
Car myCar("Red", "Sportster", 2023);
cout << "My car is a " << myCar.getColor() << " " << myCar.getModel()
<< " from " << myCar.getYear() << endl;
myCar.start();
myCar.start(); // 다시 시작을 시도합니다
myCar.stop();
myCar.stop(); // 다시 정지를 시도합니다
return 0;
}
출력:
My car is a Red Sportster from 2023
The Red Sportster is starting!
The car is already running!
The Red Sportster is stopping!
The car is already stopped!
멋지지 않나요? 우리의 자동차는 이제 더 이상 실제 자동차처럼 행동합니다 – 이미 가동 중이면 시작할 수 없고, 이미 멈춰 있으면 정지할 수 없습니다.
메서드 표
다음은 우리의 개선된 Car
클래스의 메서드를 요약한 표입니다:
메서드 | 설명 |
---|---|
Car(string c, string m, int y) |
생성자: 새로운 Car 객체를 초기화합니다 |
string getColor() |
자동차의 색상을 반환합니다 |
string getModel() |
자동차의 모델을 반환합니다 |
int getYear() |
자동차의 연식을 반환합니다 |
void start() |
자동차가 아직 가동 중이지 않으면 시작합니다 |
void stop() |
자동차가 현재 가동 중이면 정지합니다 |
그리고 이렇게 끝납니다! 여러분은 첫 번째 C++ 클래스를 만들고, 그 클래스에서 객체를 생성했습니다. 연습이 정신을 실려, 여러분만의 클래스와 객체를 실험해보세요. 아마 Garage
클래스를 만들어 여러 Car
객체를 저장할 수 있을까요?
코딩을 계속하고, 계속 배우며, 가장 중요한 것은 즐기세요! 알지 못하게 될 때까지, 여러분도 C++ 클래스와 객체의 기쁨을 다른 사람들에게 가르치게 될 거예요. 다음 번에 뵙겠습니다, 즐거운 코딩!
Credits: Image by storyset