게임 개발자를 위한 C++ 문법

게임 개발자를 위한 C++ 문법 / 1-5 ~ 1-6

jh009 2026. 5. 4. 20:18

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;
}

객체지향 프로그래밍