C++은 객체 지향 프로그래밍(Object-Oriented Programming, OOP)을 지원하는 대표적인 프로그래밍 언어입니다. 객체 지향 프로그래밍의 핵심 개념 중 하나는 클래스와 객체입니다. 이번 포스팅에서는 클래스와 객체에 대해 알아보고, 이를 사용하는 방법과 예제를 통해 이해를 돕겠습니다.
클래스란 무엇인가?
클래스(Class)는 객체를 생성하기 위한 청사진(Template) 또는 설계도입니다. 클래스는 데이터(멤버 변수)와 함수(멤버 함수)를 포함할 수 있으며, 이를 통해 데이터를 캡슐화하고 관련 작업을 정의할 수 있습니다.
클래스 정의
C++에서 클래스는 class
키워드를 사용하여 정의합니다. 클래스는 멤버 변수와 멤버 함수로 구성됩니다.
class ClassName {
public:
// 멤버 변수
int memberVariable;
// 멤버 함수
void memberFunction() {
// 함수 내용
}
};
접근 지정자
클래스는 접근 지정자(Access Specifiers)를 통해 멤버 변수와 함수의 접근 범위를 제어합니다.
public
: 모든 외부 코드에서 접근 가능.private
: 클래스 내부에서만 접근 가능.protected
: 클래스와 이를 상속받은 파생 클래스에서 접근 가능.
기본적으로 클래스의 멤버는 private
으로 설정됩니다.
객체란 무엇인가?
객체(Object)는 클래스로부터 생성된 인스턴스(Instance)입니다. 객체는 클래스에서 정의한 멤버 변수와 함수에 실제 데이터를 할당하고 동작을 수행합니다.
객체 생성
클래스의 객체는 다음과 같이 생성합니다.
ClassName objectName;
멤버 접근
객체의 멤버 변수와 함수에 접근하려면 .
(dot) 연산자를 사용합니다.
objectName.memberVariable = 10;
objectName.memberFunction();
클래스와 객체의 예제
간단한 클래스 예제
#include <iostream>
using namespace std;
class Person {
public:
// 멤버 변수
string name;
int age;
// 멤버 함수
void introduce() {
cout << "안녕하세요, 제 이름은 " << name << "이고, 나이는 " << age << "살입니다." << endl;
}
};
int main() {
// 객체 생성
Person person1;
// 멤버 변수에 값 할당
person1.name = "홍길동";
person1.age = 25;
// 멤버 함수 호출
person1.introduce();
return 0;
}
실행 결과
안녕하세요, 제 이름은 홍길동이고, 나이는 25살입니다.
생성자와 소멸자
생성자(Constructor)
생성자는 클래스의 객체가 생성될 때 자동으로 호출되는 특별한 함수입니다. 생성자는 주로 멤버 변수를 초기화하는 데 사용됩니다. 생성자의 이름은 클래스 이름과 동일하며 반환값이 없습니다.
생성자 예제
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 생성자
Person(string personName, int personAge) {
name = personName;
age = personAge;
}
void introduce() {
cout << "안녕하세요, 제 이름은 " << name << "이고, 나이는 " << age << "살입니다." << endl;
}
};
int main() {
// 객체 생성 및 초기화
Person person1("홍길동", 25);
person1.introduce();
return 0;
}
소멸자(Destructor)
소멸자는 객체가 소멸될 때 자동으로 호출되는 특별한 함수입니다. 소멸자의 이름은 클래스 이름 앞에 ~
기호를 붙여 정의하며, 반환값이 없습니다.
소멸자 예제
#include <iostream>
using namespace std;
class Person {
public:
string name;
// 생성자
Person(string personName) {
name = personName;
cout << name << " 객체가 생성되었습니다." << endl;
}
// 소멸자
~Person() {
cout << name << " 객체가 소멸되었습니다." << endl;
}
};
int main() {
Person person1("홍길동");
return 0;
}
실행 결과
홍길동 객체가 생성되었습니다.
홍길동 객체가 소멸되었습니다.
접근 지정자와 캡슐화
캡슐화(Encapsulation)는 데이터를 보호하기 위해 접근을 제한하는 객체 지향 프로그래밍의 중요한 개념입니다. 이를 위해 getter와 setter를 사용합니다.
캡슐화 예제
#include <iostream>
using namespace std;
class Person {
private:
string name;
int age;
public:
// Setter 함수
void setName(string personName) {
name = personName;
}
void setAge(int personAge) {
if (personAge > 0) {
age = personAge;
} else {
cout << "나이는 0보다 커야 합니다." << endl;
}
}
// Getter 함수
string getName() {
return name;
}
int getAge() {
return age;
}
void introduce() {
cout << "안녕하세요, 제 이름은 " << name << "이고, 나이는 " << age << "살입니다." << endl;
}
};
int main() {
Person person1;
person1.setName("홍길동");
person1.setAge(25);
cout << "이름: " << person1.getName() << endl;
cout << "나이: " << person1.getAge() << endl;
person1.introduce();
return 0;
}
실행 결과
이름: 홍길동
나이: 25
안녕하세요, 제 이름은 홍길동이고, 나이는 25살입니다.
결론
클래스와 객체는 C++의 객체 지향 프로그래밍에서 중요한 개념입니다. 클래스는 객체를 생성하기 위한 설계도이며, 객체는 클래스의 인스턴스입니다. 이번 포스팅에서는 클래스와 객체의 기본적인 개념, 생성자와 소멸자, 그리고 캡슐화에 대해 살펴보았습니다.
'cpp' 카테고리의 다른 글
C++ 연산자 오버로딩 (Operator Overloading) (0) | 2024.12.19 |
---|---|
C++ 상속과 다형성 (0) | 2024.12.19 |
C++ 동적 메모리 관리 (0) | 2024.12.19 |
C++ 포인터와 참조 (0) | 2024.12.18 |
C++ 배열과 문자열 (0) | 2024.12.18 |