Channi Studies

[C++] 클래스 멤버 접근하기 (Accessing Class Members) 본문

C++/객체지향 프로그래밍 (OOP)

[C++] 클래스 멤버 접근하기 (Accessing Class Members)

Chan Lee 2023. 12. 26. 23:33

아시다시피 클래스에는 속성 attributes메소드 methods 가 존재합니다.

 

이것들을 클래스 멤버 라고 부르는데요,

클래스 멤버들에 접근하기 위해서는 어떻게 해야 할까요?

 

바로 각 객체들의 이름 뒤에 dot operator(.) 를 사용합니다.

 

은행 계좌 관리용 Account 클래스를 통해 ricky_account라는 객체를 만들었습니다.

 

그리고 ricky_account.balance, ricky_account.deposit(double)으로 각각 

속성과 메소드를 호출하였습니다.

Account ricky_account;

ricky_account.balance;
ricky_account.deposit(1000.00);

 

그렇다면 동적으로 만들어진 객체에 대해서는 어떻게 할까요?

두가지 방법이 있습니다.

Account ricky_account = new Account;	// 객체 동적 선언

// 방법 1
(*ricky_account).balance;
(*ricky_account).deposit(1000.00);

// 방법 2
ricky_account->balance;
ricky_account->deposit(1000.00);

 

위의 방법과 같이 dot operator을 쓰는 방법 외에도

pointer operator(arrow operator)을 사용하는 방법도 존재합니다.

 

하지만 위와 같이 접근하여 출력하려고 하면 컴파일러 에러가 발생할 것 입니다.

그것은 접근 제한자를 public으로 설정하지 않아서입니다.

 

class Account {
public:
  double balance;

  void deposit(double amount);
};

클래스를 선언할 때 다음과 같이 public: 키워드를 사용한다면,

외부에서 객체의 데이터에 대한 접근을 허가합니다.

이에 대한 자세한 정보는 다음 포스트에서 다루겠습니다.

 

 

다시 돌아와서, 예시 코드를 살펴보겠습니다.

#include <iostream>
#include <string>

class Player {
public:
  string name;
  int xp;
  int hp;

  void talk(string text_to_say) {
    cout << name << " says: " << text_to_say << endl;
  }
};

int main() {
  Player ricky;
  ricky.name = "Ricky";
  ricky.xp = 0;
  ricky.hp = 1000;

  ricky.talk("Hello, there");	// Output: Ricky says: Hello, there
  
  
  Player *enemy = new Player;
  enemy->name = "Enemy";			// arrow operator
  (*enemy).xp = 10;			    // dot operator
  enemy->hp = 500;
  
  enemy->talk("I Love You");			// Output: Enemy says: I Love You


  delete enemy;
  
  return 0;
}

오늘 배운 방법으로 Player 클래스를 활용한 짧은 코드입니다.

 

클래스 멤버들에 접근하는 방법들이 쉽게 나타나있습니다.

정적 개체와 달리 동적 할당된 개체들은 arrow operator을 사용하거나 dereference 과정을 거친다는 것을 유의해주세요!