[C++] static
▶ static
- 함수의 생명 주기(life cycle)와 사용 범위(scope)를 지정하는 4가지 방식(storage class)중 하나
- 변수와 함수에 대한 기억 부류의 한 종류
● 생명 주기(life cycle) - 프로그램이 시작될 때 생성, 프로그램 종료 시 소멸
● 사용 범위(scope) - 선언된 범위, 접근 지정에 따름
▷ static 멤버와 non-static 멤버
● non-static(사람의 눈) - 눈은 사람이 태어날 때 같이 생성되며 죽으면 함께 소멸
(non-static 멤버들은 객체가 생길 때 함께 생성되고, 객체가 소멸할 때 함께 소멸)
● static 멤버(공기) - 어떤 사람이 태어나기전에 이미 존재, 모든 사람이 공유, 자신이 죽은 후에도 공기
(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 사용 불가