Class
멤버 함수
필요한 동작을 정의
보통 외부에서도 접근하게 하는 경우가 많음
멤버 변수
세부 데이터 관리
멤버 함수에서 필요한 정보, class 자체에서 내부 연산 시 필요한 정보를 멤버 변수로 관리
필요한 동작만 공개 / 세부 데이터는 숨기는 방식(비공개)
class 는 일반적으로 멤버 함수(동작), 멤버 변수(데이터)로 구성
class 의 멤버 함수를 구현하는 방법
1. 클래스 내부에서 멤버 함수의 본문까지 직접 정의하는 방법
2. 클래스 내부에서 멤버 함수의 선언만 작성하고, 클래스 외부에서 구현하는 방법
ㄴ 2번을 많이 쓴다고 함
// 1. 클래스 내부에서 멤버 함수의 본문까지 직접 정의
#include <iostream>
#include <algorithm> //max 함수 사용
#include <string>
using namespace std;
class Student
{
//동작 정의(이를 멤버함수라고 합니다)
double getAvg()
{
return (kor + eng + math ) / 3.0;
}
int getMax()
{
return max(max(kor, eng), math);
}
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
// 2. 클래스 내부에서 멤버 함수의 선언만 작성하고, 클래스 외부에서 구현
#include <iostream>
#include <algorithm> //max 함수 사용
#include <string>
using namespace std;
class Student
{
//동작 정의(이를 멤버함수라고 합니다)
double getAvg();
int getMaxNum();
//데이터 정의(이를 멤버변수라고 합니다.)
int kor;
int eng;
int math;
};
double Student::getAvg()
{
return (kor + eng + math) / 3.0;
}
int Student::getMaxNum()
{
return max(max(kor, eng), math);
// 다른 방법 return max({ kor, eng, math });
}

접근제어
멤버 함수나 멤버 변수에 접근할 때는 객체 뒤에 멤버 접근 연산자 . 을 사용
클래스는 접근 지정자를 사용하여 멤버의 접근 권한을 제어할 수 있음
C++의 접근 지정자
public
private
protected
설정을 안하면 디폴트는 private
public : 클래스 외부에서 멤버 접근 연산자로 접근할 수 있음
private : 클래스 외부에서 직접 접근 시 컴파일 에러 발생

getter / setter
private(비공개) 에 있는 변수를 제어하는 방법
setter : 멤버 변수를 바꿀 때
getter : 값을 가져올 때
getter 와 setter 를 통해서 멤버 변수를 제어
※ 직접 제어하지 않음 ※


if문까지 사용하면 setter 를 통해서만 값을 수정할 수 있기 때문에 의도된 상황에서만 값이 수정
if (0 < math && math <= 100)
{
this->math = math;
}
setMathScore 변수는 private 으로 되어 있기 때문에
오직 setMathScore 를 통해서만 수정될 수 있음
setMathScore 를 호출했을 때만
this->math 의 값이 수정되는 것을 보장할 수 있음
생성자
- 객체를 생성할 때마다 한 번씩 자동으로 호출되는 특별한 멤버 함수
- 필요한 멤버 변수를 초기화, 객체가 동작할 준비를 하기 위해서 사용
- 생성자의 반환형 X , class 이름과 동일한 이름을 가진 함수로 정의됨
1. class를 변수로 선언하면 해당 객체가 메모리에 올라감 → 인스턴스화
Ex)
class → 붕어빵기계
객체, 인스턴스 (메모리에 실제 올라간 상태) → 붕어빵

기본 생성자
인자가 없는 생성자
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 기본 생성자
Person() {
name = "Unknown";
age = 0;
}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Person p; // 기본 생성자 호출
p.display();
return 0;
}
매개변수가 있는 생성자
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 매개변수가 있는 생성자
Person(string n, int a) {
name = n;
age = a;
}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Person p("Alice", 25); // 매개변수가 있는 생성자 호출
p.display();
return 0;
}
기본매개변수가 있는 생성자
#include <iostream>
using namespace std;
class Person {
public:
string name;
int age;
// 기본 매개변수가 있는 생성자
Person(string n = "DefaultName", int a = 18) {
name = n;
age = a;
}
void display() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
Person p1; // 기본값 사용
Person p2("Bob", 30); // 값을 지정
p1.display();
p2.display();
return 0;
}
객체지향 프로그래밍


'게임 개발자를 위한 C++ 문법' 카테고리의 다른 글
| 게임 개발자를 위한 C++ 문법 / 3-1 ~ 3-2 (0) | 2026.05.18 |
|---|---|
| 게임 개발자를 위한 C++ 문법 / 2-4 (0) | 2026.05.15 |
| 게임 개발자를 위한 C++ 문법 / 2-3 (0) | 2026.05.13 |
| 게임 개발자를 위한 C++ 문법 / 2-1 ~ 2-2 (0) | 2026.05.06 |
| 게임 개발자를 위한 C++ 문법 / 1-1 ~ 1-4 (0) | 2026.04.30 |