[C++]

[C++] static

Jarvis2304 2022. 10. 26. 08:31

▶ static

- 함수의 생명 주기(life cycle)와 사용 범위(scope)를 지정하는 4가지 방식(storage class)중 하나

- 변수와 함수에 대한 기억 부류의 한 종류

● 생명 주기(life cycle) - 프로그램이 시작될 때 생성, 프로그램 종료 시 소멸

● 사용 범위(scope) - 선언된 범위, 접근 지정에 따름

 

▷ static 멤버와 non-static 멤버

non-static(사람의 눈) - 눈은 사람이 태어날 때 같이 생성되며 죽으면 함께 소멸

(non-static 멤버들은 객체가 생길 때 함께 생성되고, 객체가 소멸할 때 함께 소멸)

static 멤버(공기) - 어떤 사람이 태어나기전에 이미 존재, 모든 사람이 공유, 자신이 죽은 후에도 공기

(static 멤버는 계속 존재 (프로그램이 시작할때 생성, 객체가 사라져도 계속 존재)

static 멤버:공기,  non-static 멤버:사람의 눈

 

▷non-static 멤버

- 객체가 생성될 때 함께 생성

- 객체마다 객체 내에 생성

- 인스턴스(instance) 멤버라고 불림

 

▷static 멤버

- 프로그램이 시작할때 생성

- 클래스 당 하나만 생성, 클래스(class) 멤버라고 불림

- 클래스의 모든 인스턴스(객체)들이 공유하는 멤버

 

 

 

▶ static 멤버 선언

 

 

 

▷ static 멤버와 non-static 멤버의 관계

 

 

static 멤버와 non-static 멤버의 비교

 

 

 

 

▶ static 멤버 사용 :객체의 멤버로 접근

- static 멤버는 객체 이름이나 객체 포인터로 접근

- 보통 멤버처럼 접근할 수 있음

 

예제)  Person 타입의 객체 lee와 포인터 p를 이용하여 static 멤버를 접근

 

예제) static 멤버 사용 (객체의 멤버로 접근)

 

 

 

 

 static 멤버 사용 :클래스명과 범위 지정 연산자(::)로 접근

● 클래스 이름과 범위 지정 연산자(::)로 접근 가능

 static 멤버는 클래스마다 오직 한 개만 생성되기 때문

 

● non-static 멤버는 클래스 이름을 접근 불가

 

 

 

예제) static 멤버 사용 (클래스명과 범위 지정 연산자(::)로 접근)

 

 

 

 

 

 

▶ static 활용

전역 변수나 전역 함수를 클래스에 캡슐화

- 전역 변수나 전역 함수를 가능한 사용하지 않도록 (캡슐화를 하기 위해)

- 전역 변수나 전역 함수를 static으로 선언하여 클래스 멤버로 선언

 

● 객체 사이에 공유 변수를 만들고자 할 때

- static 멤버를 선언하여 모든 객체들이 공유

 

 

예제) static 멤버를 가진 Math 클래스 작성

 

예제) static 멤버를 공유 목적으로 사용

 

 

 

▷ static 멤버 함수는 static 멤버만 접근 가능

static 멤버함수가 접근할 수 있는 것

- static 멤버 함수

- static 멤버 변수

- 함수 내의 지역 변수

 

● static 멤버 함수는 non-static 멤버에 접근 불가

- 객체가 생성되지 않은 시점에서 static 멤버함수가 호출될 수 있기 때문에

 

 

▷ static 멤버 함수 getMoney()가 non-static 멤버 변수 moeny로 접근하는 오류

 

▷ non-static 멤버 함수는 static에 접근 가능

 

  static 멤버 함수는 this 사용 불가

- static 멤버 함수는 객체가 생기기 전부터 호출가능

- static 멤버 함수에서 this 사용 불가