프로그래밍 언어/C++

6) 접근 지정자, static 멤버

busy맨 2023. 11. 2. 12:15

1. 접근 지정자

1) 접근 지정자

  • 캡슐화의 목적
    • 객체 보호, 보안
    • C++에서 객체의 캡슐화 전략
      • 객체의 상태를 나타내는 멤버 변수에 대한 보호
      • 중요한 멤버는 다른 클래스나 객체에서 접근할 수 없도록 보호
      • 외부와의 인터페이스를 위해서 일부 멤버는 외부에 접근 허용

 

  • 멤버에 대한 3가지 접근 지정자
    • private (디폴트 값)
      • 동일한 클래스의 멤버 함수에만 제한
      • 클래스 밖에서 직접 접근 불가
      • 멤버 변수는 private으로 지정하는 것이 바람직
    • protected
      • 클래스 자신과 상속받은 자식 클래스에만 허용
    • public
      • 모든 다른 클래스에 허용
        • 클래스 밖에서 직접 접근 가능
class Sample {
private:
// private 멤버 선언
public:
// public 멤버 선언
protected:
// protected 멤버 선언
};

 

 

 

2) 구조체 vs 클래스

  • 구조체는 상속, 멤버, 접근 지정 등 모든 것이 클래스와 동일
  • 유일하게 다른 것은 구조체의 디폴트 접근 지정이 public

2. static 멤버

1) 클래스의 멤버

  • static 멤버
    • 프로그램이 시작할 때 생성
    • 클래스 당 하나만 생성, 클래스 멤버라고 불림
    • 클래스의 모든 객체들이 공유하는 멤버
    • static 멤버에 대한 외부 선언이 필요
      • 없으면 에러 발생
  • nonstatic 멤버
    • 객체가 생성될 때 함께 생성
    • 객체마다 객체 내에 생성
class Person {
public:
    double money; // 개인 소유의 돈
    void addMoney(int money) 
    {
    	this->money += money;
	}

    static int sharedMoney; // 공금이라는 static멤버 변수 선언
    static void addShared(int n)	//static멤버 함수 선언
    {
        sharedMoney += n;
    }
};

int Person::sharedMoney = 10; // sharedMoney를 10으로 초기화(static멤버 변수 공간 할당)

2) static 멤버 사용

  • static 멤버 변수
    • 같은 클래스의 객체들 사이에 공유되는 멤버 변수
    • 보통 멤버처럼 접근할 수 있음
    • 클래스 이름과 범위 지정자(::)로 접근
window w1;
strcpy(w1.desktop,”HH”);
strcpy(window::desktop,”HH”);
  • static 멤버 함수
    • 객체 없이 호출할 수 있는 멤버 함수
    • 보통 멤버함수처럼 객체 이름이나 포인터로 접근 가능
    • 클래스 이름과 범위 지정자(::)로 접근
    • this 포인터가 없음
      • 멤버 함수는 객체의 소유가 아님
window *w2;
w2 = &w1;
w2→closeAll();
window::closeAll();
  • 객체의 멤버로 접근
    • 객체.static멤버
    • 객체 포인터 -> static멤버
Person lee;
lee.sharedMoney = 500; // 객체.static멤버 방식

Person *p;
p = &lee;
p→addShared(200); // 객체포인터→ static멤버 방식
  • Ex) static 예제
#include <iostream>
using namespace std;

class Person {
public:
    double money; // 개인 소유의 돈
    void addMoney(int money) {
    	this->money += money;
    }

    static int sharedMoney; // 공금
    static void addShared(int n) {
    	sharedMoney += n;
    }
};

// static 변수 생성. 전역 공간에 생성
int Person::sharedMoney=10; // 10으로 초기화

// main() 함수
int main() 
{
    Person han;
    han.money = 100; // han의 개인 돈=100
    han.sharedMoney = 200; // static 멤버 접근, 공금=200
    Person lee;
    lee.money = 150; // lee의 개인 돈=150
    lee.addMoney(200); // lee의 개인 돈=350
    lee.addShared(200); // static 멤버 접근, 공금=400
    cout << han.money << ' ' << lee.money << endl;
    cout << han.sharedMoney << ' ' << lee.sharedMoney << endl;
}

'프로그래밍 언어 > C++' 카테고리의 다른 글

8) 함수와 참조, 복사생성자  (0) 2023.12.08
7) 여러가지 객체의 생성 방법  (1) 2023.11.03
5) 생성자와 소멸자  (0) 2023.11.01
4) 클래스와 객체의 기본  (1) 2023.11.01
3) 개선된 함수 기능  (0) 2023.11.01