[명품 C++ Programming] chapter 6 : 함수 중복과 static 멤버(3) - static 멤버

eunee22·2023년 8월 23일

명품 C++ Programming

목록 보기
24/34

제가 대학교 1학년 때 [명품 C++ Programming] 교재로 진행되는 C++ 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다.
(2022.9 ~ 2022.12)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.

🍑static 멤버

static의 특성

  • 모든 변수와 함수는 static 지정자로 선언 가능

  • 변수와 함수의 기억 부류(생명 주기, 사용 범위)을 지정하는 방식 중 하나

    1. 생명 주기 → 프로그램 시작 시 생성 프로그램 종료 시 소멸
    2. 사용 범위 → 선언된 범위(전역 or 지역), 접근 지정 내에서 사용

static 멤버 vs non-static 멤버

1. static 멤버

  • 프로그램이 시작할 때 생성
    → 객체 생성전에 이미 생성, 객체 사라져도 소멸x
  • 클래스 당 하나만 생성
    → 객체 내부가 아닌 별도의 공간에 생성
  • 클래스의 모든 객체(인스턴스)들이 공유하는 클래스 멤버

2. non-static 멤버

  • 객체가 생성될 때 함께 선언
    → 객체와 생명주기를 함께함
  • 객체마다 객체 내에 생성
    → 멤버는 객체 별로 따로 공간 유지
  • 인스턴스 멤버라고 불림

static 멤버 선언

  • 멤버 함수나 멤버 변수의 선언문 앞에 static 지정자를 붙이면 됨
  • static 멤버 변수의 경우 클래스 바깥의 전역 공간에 선언이 되어야함
    → 클래스 내부에 선언 후 바깥에서 클래스 멤버 함수 구현하듯이 초기화함(외부 선언 없으면 링크 오류)
    ▶ 클래스 내부 → static int sharedMoney; (person 클래스)
    ▶ 클래스 외부 → int person :: sharedMoney = 10;

static 멤버 사용

1. 객체의 멤버로 접근

  • 객체 이름이나 객체 포인터로 보통 멤버처럼 접근

2. 클래스명과 범위 지정 연산자(::)로 접근

  • 클래스 이름 :: static멤버 로 접근
    → 클래스당 하나만 존재하므로 가능
  • non-static 멤버는 불가능함 유의

static의 활용

  1. 전역 변수나 전역 함수를 클래스에 캡슐화
  • 그냥 전역 변수나 전역 함수를 가능한 사용하지 않도록 → 클래스 멤버로 선언
  1. 객체 사이에 공유 변수를 만들고자 할 때

static 멤버 함수의 특징

  1. static 멤버 함수는 non-static 멤버에 접근 불가
    → 객체 생성 안된 시점에서 static 멤버 함수가 호출 될수 있기 때문(반대는 가능)
    static 멤버 함변수, 함수 내의 지역 변수
  2. this 사용 불가
    → 객체 사용 전부터 호출 가능하므로
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글