클래스 (Class)
C++에서 클래스는 객체 지향 프로그래밍의 기본적인 개념 중 하나이다.
클래스는 데이터와 해당 데이터를 조작하는 함수를 함께 묶어 놓은 사용자 정의
데이터 형식이다. 클래스는 객체의 설계도나 템플릿으로 볼 수 있으며,
객체를 생성하기 위한 템플릿으로 사용된다.
클래스는 멤버 변수와 멤버 함수로 구성된다.
멤버 변수는 클래스 내에서 데이터를 저장하는 변수를 나타내며,
멤버 함수는 클래스 내에서 데이터를 조작하거나 처리하기 위한
함수를 나타냅니다.
객체는 클래스로부터 생성되며, 클래스의 인스턴스라고도 부릅니다.
객체는 클래스의 멤버 변수에 저장된 데이터에 접근하고, 멤버 함수
를 호출하여 작업을 수행할 수 있습니다.
아래의 코드처럼 사용된다.
class MyClass {
private:
int myVariable; // 멤버 변수
public:
void setMyVariable(int value) {
myVariable = value;
}
int getMyVariable() {
return myVariable;
}
};
int main()
{
MyClass myObject; // MyClass의 객체 생성
myObject.setMyVariable(10); // 멤버 함수 호출하여 myVariable 값을 설정
int value = myObject.getMyVariable(); // 멤버 함수 호출하여 myVariable 값을 얻음
return 0;
}
클래스 구조
1. 멤버 변수(Member Variables) :
클래스 내에 선언된 변수로, 객체의 상태나 속성, 즉 정보를 나타낸다.
멤버 변수는 클래스의 어디에서든 접근 가능한 범위를 가지는데, 일반적으로
private, public, protected 와 같은 접근 지정자를 사용하여 접근 법위를 제한한다.
멤버 변수는 클래스 내에서 사용되는 데이터를 저장하며,
클래스의 객체마다 독립적인 각각의 멤버 변수를 가진다.
2. 멤버 함수(Member Functions) :
클래스 내에 선언된 함수로, 주로 객체의 동작이나 행위를 정의한다.
멤버 함수는 클래스 내에서 멤버 변수에 접근할 수 있으며, 멤버 변수를
조작하거나 사용할 수 있는 기능을 제공한다.
멤버 함수는 객체를 통해 호출되며, 객체의 상태에 따라 멤버 변수를
조작하거나 결과를 반환할 수 있다.
3. 객체(Objects) :
클래스로부터 생성된 인스턴스를 의미한다. 즉 클래스의 실제 예시이다.
클래스는 객체를 만들어 내는 틀이고, 객체는 그러한 틀에서 만들어진
표본이라고 생각하면 된다.
객체는 클래스의 맴버 변수에 저장된 데이터에 접근하고, 멤버 함수를 호출하여
작업을 수행할 수 있습니다.
클래스를 정의하고 객체를 생성하여 사용하는 것은 객체 지향 프로그래밍의
핵심 개념 중 하나이다.
다수의 객체를 생성하여 각 객체의 상태와 동작을 독립적으로 관리할 수 있다.
4. 생성자(Constructors)와 소멸자(Destructors) :
생성자는 객체가 생성될 때 호출되는 특별한 멤버함수이다.
객체의 초기화를 담당한다.
생성자는 클래스와 동일한 이름을 가지며, 객체를 생성 할 때
자동으로 호출된다.
소멸자는 객체가 소멸될 때 특별한 멤버 함수이다.
객체가 메모리에서 해제될 때 필요한 정리 작업을 수행한다.
소멸자는 클래스 이름 앞에 '~' 기호를 붙여서 정의한다.
5. 접근 지정자(Access Specifiers) :
클래스의 멤버 변수와 멤버 함수에 대한 접근 범위를 제한하기 위해 사용한다.
세 가지 주요 접근 지정자인 private, public, protected 가 있다.
- private : 해당 멤버는 클래스 내부에서만 접근 가능. 클래스 외부에서 는 접근 불가능.
- public : 해당 멤버는 클래스 외부에서도 접근 가능. 클래스를 통해 객체를 생성하거나 객체의 멤버 함수를 호출할 떄 사용
- protected : 해당 멤버는 클래스 내부와 해당 클래스를 상속받은 파생 클레스에서 접근 가능.
아래의 코드는 생성자를 이용한 코드의 예시이다.
#include <iostream>
#include <string>
class Person {
private: // 접근 지정자
std::string name;
int age;
public: // 접근 지정자
// 생성자
Person(std::string n, int a) {
name = n;
age = a;
}
// 멤버 함수
void introduce() {
std::cout << "이름: " << name << std::endl;
std::cout << "나이: " << age << std::endl;
}
};
int main() {
// Person 클래스의 객체 생성
Person person1("Alice", 25);
Person person2("Bob", 30);
// 객체의 멤버 함수 호출하여 정보 출력
person1.introduce();
std::cout << std::endl;
person2.introduce();
return 0;
}
class와 struct의 차이
C++ 에서 struct와 class는 모두 사용자 정의 데이터 형식을 정의하는데 사용되는 키워드다.
하지만 두 키워드에는 몇 가지 차이점이 있다.
1. 접근 지정자 :
struct : 멤버 변수나 멤버 함수에 별도로 지정해주지 않으면 기본적으로
멤버 변수와 멤버 함수의 접근 지정자가 public이다.
class : 멤버 변수나 멤버 함수에 별도로 지정해주지 않으면 기본적으로
멤버 변수와 멤버 함수의 접근 지정자가 private이다.
2. 상속 :
struct : 별도로 지정해주지 않으면 기본적으로public 상속을 지원한다.
struct에 상속된 멤버들은 상속받은 클래스 외부에서 접근이 가능하다.
class : 별도로 지정해주지 않으면 기본적으로 private 상속을 지원한다.
class에 상속된 멤버들이 상속 받은 클래스 외부에서 접근 불가능하며,
접근 지정자를 명시적으로 지정해야 외부에서 접근 가능하다.
3. 사용 용도 :
struct : 주로 데이터의 집합을 표현하는데 사용. 일반적으로 멤버 변수만을 가지며,
메서드는 제한적으로 사용된다.
class : 주로 객체 지향 프로그래밍의 개념을 구현하는데 사용. 데이터와 해당 데이터
를 조작하는 메서드를 포함하는데 사용된다.
4. 호환성 :
stuct와 class는 문법적으로 다르지만, C++에서는 두 키워드를 상호 교환 가능하게 만들었다.
즉 struct를 class로 대체하거나 그 반대로 사용해도 문제가 없다. 다만, 관례적으로 struct는
주로 데이터 구조에 사용되고, class는 주로 객체 지향적인 기능을 나타내는데 사용된다.
외형적인 차이는 아래의 코드와 같이 키워드 struct를 대신해 class사용한 것 뿐이다.
// struct 예시
struct MyStruct {
int myVariable;
void myFunction() {
// 멤버 함수의 구현
}
};
// class 예시
class MyClass {
private:
int myVariable;
public:
void myFunction() {
// 멤버 함수의 구현
}
};
class 파일 분할
class를 사용할 때는 파일을 분할해 줘야한다.
클래스명.h 로 헤더파일을 만들고 그 안에 class를 선언하고
멤버변수와 멤버함수를 선언만한다.
멤버함수의 정의는 cpp파일에 따로 만들어서 관리하도록 한다.